2,构造方法与析构方法都是在对象存在的时候被调用。
3,finalize()方法是在对象被当成垃圾从内存中释放前调用,而不是在对象变成垃圾前调用。
4,main只在类被装载时调用,因此只会执行一次。在类的实例里main函数并不会被执行。
5,类的static属性在类被装载时被初始化。
6,Java参数是值传递,且函数的形参是实参的副本。
7,&&和||均为短路运算符。a&&b表示当a条件为false的时候不用运行b条件;a||b表示a条件为真的时候不会运行b条件.
8,静态代码块在类被装载时被执行,且只能被执行一次,静态块经常用来进行类属性(类的静态属性)初始化。
9,单例设计模式:------对某个类只存在她的一个实例。
类的构造方法要设成静态的:防止外部用new来实例这个类。
类有个静态方法提供给外部用来返回一个该类的一个实例引用。
该类的实例引用变量是一个静态变量。同时因为该类的引用变量是一个静态变量,所以他暗含了返回的实例是同一个实例。
10,内部类:
在类中直接定义的嵌套类的使用范围,仅限于这个类的内部。
如果用static修饰一个内部类,这个类就相当于是一个外部定义的类。所以static的内部类中可以声明static成员,但是,菲static的内部类中的成员是不能声明为static的。static的内部类不能再使用外层封装类的非static的成员变量。
方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于一个常量,他的生命周期超出了方法运行的生命周期。
11,如果子类构造方法中没有显式调用父类构造方法,而父类中又没有无参数的构造方法(需要再次说明的是,如果父类没有显式的定义任何构造方法,系统将自动提供一个默认的没有参数的构造方法,这还是等于父类中有无参数的构造方法的),则编译出错。
12,子类对象的实例化过程。
(1)产生对象并对成员变量默认初始化
(2)绑定构造方法参数,对构造方法中的形式参数赋值
(3)如果有this()调用,则调用相应的重载构造方法(被调用的重载构造方法又从步骤2开始执行这些流程),被调用的重载构造方法的执行流程结束后,回到当前构造方法。当前构造方法直接跳转到步骤6执行
(4)显式或者隐式追溯调用父类的构造方法(一直到object类为止,object类是所有java类的最顶层父类),父类的构造方法又从步骤2开始对父类执行这些流程,父类的构造方法的执行流程结束后,回到当前构造方法,但前构造方法继续往下执行。
(5)进行实例变量的显式初始化操作,也就是 执行载定义成员变量时候就对其进行赋值的语句
(6)执行当前构造方法的方法体中的程序代码。
13,接口:
接口的成员都是public访问类型的
接口里的变量默认是用public static final标识的,所以,接口中定义的变量就是全局静态常量
实现一个接口就是药实现该接口的所有方法
接口中的方法都是抽象的
14,instanceof
用来判断是否一个类实现了某个接口,也可以用他来判断一个实例对象是否属于一个类
15,自定义的异常必须继承Exception类
16 ,线程:
线程的产生:有两种方法--继承Thead类和实现Runnable接口
一个代码段被执行,一定是在某个线程上运行的,代码与线程密不可分,同一段代码可以于多个线程相关联,在多个线程上执行的也可以是相同的一段代码。
实现Runnabel 接口相对于继承Thead类来说,至少有如下几点好出:
(1),同一资源可以被多个相同的程序代码的线程共享。
(2),可以避免由于Java的单继承性带来的局限。
线程的分类:前台线程和后台线程
联合线程
线程安全
线程同步
对象的锁旗标
同步是以牺牲程序的性能为代价的
同步分为 同步代码块和同步函数
对于同步函数,由于他所使用的监视器对象是this,所以当有一个线程进入了synchronized修饰的方法*(获得监视器),其他线程就不能进入同一个对象的所有使用了synchronized修饰的方法,直到第一个线程执行完他所进入synchronized修饰的方法为止(离开监视器)。
线程的死锁
线程的通信
Java是通过Object类的wait,notify,notifyAll这几个方法来实现线程的通信的。
17,String类有几个常用的函数:如equalsIgnoreCase indexOf substring
18,要想成功的从HashTable中检索数据,用作关键字得对对象必须正确的覆盖了Object.hahCode方法和Object.equals方法。
19,DataFormat类下的SimpleDateFormat类就相当于一个模板