static
1、静态域
用static修饰的域是仅属于类的静态域,静态域是类中每个对象共享的域;他们是类的域,不属于任何一个类的具体对象;静态域是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值,因此static代码块可以优化程序性能。
2、静态方法
用static修饰的方法叫类方法也叫静态方法;静态方法和静态变量一样,不许创建类的实例,可以直接通过类名被访问;无法使用protected和abstract关键字;在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态方法和静态变量
3、静态代码执行顺序
public class Test { Person person = new Person("Test"); static{ System.out.println("test static"); } public Test() { System.out.println("test constructor"); } public static void main(String[] args) { new MyClass(); } } class Person{ static{ System.out.println("person static"); } public Person(String str) { System.out.println("person "+str); } } class MyClass extends Test { Person person = new Person("MyClass"); static{ System.out.println("myclass static"); } public MyClass() { System.out.println("myclass constructor"); } }
static语句的执行是在第一次加载类信息的时候,static 语句和 static 成员变量的初始化会先于其他语句执行,而且只会在加载类信息的时候执行一次,以后再访问该类或new新对象都不会执行
Java代码中父类和子类中,static变量,成员变量,构造函数三者的调用先后顺序:
先初始化父类Static --> 再初始化子类的Static --> 再初始化父类的其他成员变量->父类构造方法->子类其他成员变量->子类的构造方法。
所以例子输出的结果为:
test static myclass static person static person Test test constructor person MyClass myclass constructor
final
1、最终域
用final修饰的域,实际上就是Java中的常量,final变量必须被显式的初始化,并且只能初始化一次
2、最终方法
用final修饰的方法是最终方法,最终方法是不能被当前类的子类重写的方法
3、最终类
如果一个类被final修饰,这个类不能有子类
异常
无论在try部分或者catch部分成功return,finally语句部分一定会执行;如果在这个语句块中如果return成功,则同一方法的return不会执行;finally不允许return。
自定义异常类需要继承Exception类
throws使用在方法头,声明可能发生以上异常并抛出;throw使用在方法内,执行throw则一定抛出了某种异常
String
String 类是java.lang下所提供的类,并不是 java的基本数据类型;一个字符串对象一旦被创建,它的内容就是固定不变的;如果程序对这种附加字符串的需求很频繁,会消耗很大资源
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类
String a,String a = null, String a =""的区别
String a; 申明一个string类型的 a,即没有在申请内存地址,更没有在内存任何指向引用地址
String a = null ; 申明一个string类型的 a,同时在内存里申请了一个地址,但是该地址不指向任何引用地址
String a = "" ;申明一个string类型的 a,既在内存里申请了地址,该地址又指向一个引用该字符串的引用地址
Math类是final的,其中所有方法都是static的。
ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。对于需要快速随机访问元素,应该使用ArrayList。
LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率低。对于需要快速插入,删除元素,应该使用LinkedList。
Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList)。对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。
Stack 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。