- 不管你的程序有多大,一定都会有一个main()来作为程序的起点。
- Java是强类型语言。
- float f=23.5f 如果不加上f,就会被Java当做double处理。
- 对于任意一个Java虚拟机来说,所有的引用大小都一样,但是不同的Java虚拟机可能会以不同的方式来表示引用。因此某个Java虚拟机的引用大小可能会大于或小于另一个Java虚拟机的引用。
- Java是通过值传递的,也就是说通过拷贝传递。方法没办法改变调用方法所传入的参数。
- 方法可以返回会被隐含转成声明类型的其他类型值。例如说用byte当做int类型的返回。但若声明的类型容器小于想要返回的类型时,必须作明确的转换。
- 局部变量没有默认值。实例变量有默认值,例如0/0.0/false,引用的默认值是null。
- 虽然ArrayList只能携带对象而不是primitive主数据类型,但编译器能够自动地将primitive主数据类型包装成Object以存放到ArrayList中。
- 程序不会因为import而变大或变小。
- 有三种方法可以防止类被继承:(1)存取控制。非公有的类智能被同一个包的类作出子类。(2)使用final修饰符。(3)构造函数为private。
- 方法覆盖的要求:相同的参数和返回类型。存取权限必须相同或者更为开放。
- 方法重载的要求:参数不同。
- 抽象的方法必须存在于抽象类中。抽象方法的意义是就算无法实现出方法的内容,但还是可以定义出一组子型共同的协议。
- 抽象类可以带有抽象和非抽象方法。
- 任何从ArrayList<Object>取出的东西都会被当做Object类型的引用而不管它原来是什么。比如ArrayList<动物>放进去猫、狗,取出来的只能是动物,只能执行动物有的方法,不能执行猫和狗独有的方法。
- 接口是100%纯天然抽象类。
- 当调用一个方法时,该方法会放在调用栈的栈顶。
- 方法调用和局部变量在栈里;所有对象都在堆里。
- 如果没构造函数,编辑器会自动给加一个无参构造函数;构造函数没有返回值;构造函数不会被继承。
- 如果自己写了一个有参数的构造函数,那么一定要再写一个没有参数的构造函数。
- 如果一个类有一个以上构造函数,则参数一定要不一样,包括的参数的顺序与类型。
- 在创建子类对象时,构造函数在执行的时候,第一件事就是去执行它的父类的构造函数,这会连锁反应到Object这个类为止,所有父类的构造函数都会被执行。
- 调用父类的构造函数的唯一方式是:super()。super()的调用必须是构造函数的第一个语句。
- 如果在构造函数中调用了this(),那么this()也必须是构造函数的第一个语句。
- 在构造函数中super()和this()不能同时出现。
- final的变相不能改变它的值。final的方法不能被覆盖。final的类不能被继承。final的变量要在声明的时候就赋值。
- Java中唯一有重载的运算符是“+”,例如 String a = "" + d;
- 异常处理规则:
- 当有catch或者finally时,必须要有try;有try的时候,必须要有catch或者finally;如果只有try和finally,则方法必须要声明异常(void go() throws Exception...)。
- 类被序列化需要implement Serializable。最好在类里加上serialVersionUID。
- 如果实力变量不希望被序列化,则用transient标记。例如transient String aaa;
- 使用泛型的方式:
- public class ArrayList<E> extends AbstractList<E>...{}
- public <T extends Animal> void takeThing(ArrayList<T> list),注意本行的extends后面可以接类和接口都行。
- public static <T extends Comparable<? super T>> void sort(List<T> list)
- Collection API:
- 对象相等
如果两个对象相等,则hashcode必须相等。
如果两个对象相等,则a.equals(b),而且b.equals(a)。
如果两个对象的hashcode值相等,但他们不一定相等。
如果覆盖了equals(),则也要覆盖hashcode()。
hashCode()的默认行为是对在heap上的对象产生独特的值。如果没有override过hashCode(),则该class的两个对象怎么样都不会被认为是相同的。
equals()的默认行为是执行==,也就是说去测试两个引用是否对上heap上同一个对象。如果equals()没有被覆盖,两个对象永远都不会被视为相同。因为不同的对象有不同的字节组合。
a.equals(b)必须与a.hashCode()==b.hashCode()等值。
但a.hashCode()==b.hashCode()时,a.equals()不一定等值。