1. Java

1.1. 编码规范

1.2. 书籍推荐

  • 《Effective java 中文版(第2版)》 java 78 条值得注意的地方
  • 《Java编程思想(第4版)》
  • 《JAVA 2核心技术卷II:高级特性(原书第7版)》
  • 《Java Web开发详解--XML+XSLT+Servlet+JSP深入剖析与实例应用》

1.3. 在线教程

1.4. java分三个方向

  • J2ME,嵌入式设备,安卓就是目前最大的J2ME平台,不过其使用的不是JVM,而是谷歌自己开发的虚拟机
  • J2SE,桌面编程,基本没落,需要JVM支持
  • J2EE,web方向的编程

1.5. Java修饰符

类内部 本包 子类 外部包
public
protected ×
default × ×
private × × ×

1.6. Java变量

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

1.7. 继承关键字

1.7.1. extends 关键字

extends 只能继承一个类

1.7.2. implements 关键字

可以同时继承多个接口(接口跟接口之间采用逗号分隔)

1.8. final static

1.8.1. final

  • final 类不能被继承,没有子类,final类中的方法默认是final的。
  • final 方法不能被子类的方法覆盖,但可以被继承。
  • final 成员变量表示常量,只能被赋值一次,赋值后值不再改变。
  • final 不能用于修饰构造方法。
  • 注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

1.8.2. static

static 表示不要实例化就可以使用

  • 被static修饰的成员变量和成员方法独立于该类的任何对象。
  • 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。

1.9. Java 集合框架

参考 Java - 集合框架完全解析

  • Collection接口:处理对象集合的根接口
    • List:允许重复的有序集合
      • ArrayList:用数组存储元素,这个数组可以动态创建
      • LinkedList:链表中存储元素
    • Set:不包含重复的元素
      • HashSet
      • LinkedHashSet
      • TreeSet
    • Queue:先进先出的数据结构,元素在队列末尾添加,在队列头部删除。
  • Map接口:存储键值对映射的容器类
    • HashMap:基于哈希表的Map接口的非同步实现

数组与链表的区别: 数组固定的长度顺序存储。如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。 链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。

所以如果除了在末尾外不能在其他位置插入或者删除元素,那么ArrayList效率更高,如果需要经常插入或者删除元素,就选择LinkedList。

1.10. JSON to java bean

1.11. 嵌套类

  • 静态成员类:非内部类,最好当作普通类
  • 非静态成员类:内部类,
  • 匿名类:内部类,
  • 局部类:内部类,

1.12. 泛型

1.13. 通配符的使用

1.13.1. 上边界限定通配符

class Fruit {}
class Apple extends Fruit {}

// 使用通配符 flist 可以放 Fruit 和其子类。
List<? extends Fruit> flist = new ArrayList<Apple>();

// 这行会报 Compile Error: can’t add any type of object: 错
// 使用通配符失去了向这个 List 添加任何对象的能力
flist.add(new Apple());

1.13.2. 下边界限定通配符

  • 生产者用 <? extends T>
  • 消费者用 <? super T>
public class Collections {
  public static <T> void copy(List<? super T> dest, List<? extends T> src)
  {
      for (int i=0; i<src.size(); i++)
        dest.set(i,src.get(i));
  }
}

1.13.3. 无边界通配符

List<?> list 表示 list 是持有某种特定类型的 List,但是不知道具体是哪种类型。那么我们可以向其中添加对象吗?当然不可以,因为并不知道实际是哪种类型,所以不能添加任何类型,这是不安全的。

1.14. 注解

1.14.1. 注解的作用

  • 格式检查:告诉编译器信息,比如被@Override标记的方法如果不是父类的某个方法,IDE会报错;
  • 减少配置:运行时动态处理,得到注解信息,实现代替配置文件的功能;
  • 减少重复工作:比如第三方框架xUtils,通过注解@ViewInject减少对findViewById的调用,类似的还有(JUnit、ActiveAndroid等);

1.14.2. 注解的申明

// @Target(ElementType.METHOD) 申请注解只能用在 方法
@Target(ElementType.METHOD)
// @Retention(RetentionPolicy.RUNTIME) 表示该注解生存期是运行时
@Retention(RetentionPolicy.RUNTIME)
// @interface Test 声明了 Test 注解
public @interface Test {

}

1.15. 重载与重写

  • override 重写、覆盖,替换父类的方法
  • overload 重载,方法名相同,但是参数类型或数量不同

1.16. 常量、注解和枚举

  • 纯常量场景:常量只是作为全局配置数据使用;
  • 分组常量场景:归属于同一分组的常量;
  • 分组且存在对应关系的常量场景:常量归属于同一分组,且另一方面常量之间存在对应关系。

参考 优先使用注解,慎用枚举 枚举性能很差,所以优先使用枚举

1.17. JavaDoc

results matching ""

    No results matching ""