Java.知识点总结

来源:互联网 发布:1000base t以太网端口 编辑:程序博客网 时间:2024/05/17 04:52

垃圾回收
finalize()
  {
    代码块
  }
当垃圾从内存总释放前被调用,而不是产生垃圾前调用。即垃圾回收器启动前被调用。

System.gc();
强制启动垃圾回收器来回收垃圾。

 

static关键字
不能把任何方法体内的变量声明为static(静态)
类的静态成员经常被称作“类成员”(class members),静态成员变量,我们叫类属性(class attributes),静态成员方法,我们叫类方法(class methods)
用static修饰的类的成员变量和方法不属于类的某个实例

使用类的静态方法时的注意点:
①在静态方法里只能调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。
②静态方法不能以任何方式引用this和super关键字和上面道理一样,因为静态方法在使用前不要创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。
③main()方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,不能直接访问该类中非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中非静态成员。

静态代码块
一个类中可以使用不包含在任何方法体中的静态代码块(static block),当累被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性(静态成员变量)的初始化。如果某个类实例化了N个对象,这个类中的静态代码块只在第一次被载入时被执行(注意即使不进行实例化,只要类被载入并且是第一次,静态代码块就会运行)。

单态设计模式
让类在一个虚拟机中只能产生一个对象,首先将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类的内部人可以产生类的对象。在类的外部无法产生类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以类内部产生的该类对象的变量也必须定义成静态的。


内部类(嵌套类)
嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。内部类只有在嵌套它的类内部可知。内部类的成员只有在内部类范围内是可知的。
嵌套类并非只能在类里定义,也可以在方法、for循环体内部等程序块内定义。
在方法中定义的内部类只能访问方法中的final类型的局部变量,因为final定义的局部变量相当于是一个常量,他的生命周期超出方法运行的生命周期。


继承
①通过继承可以简化类的定义。
②java只支持单继承,不允许多重继承。在java中,一个子类只能有一个父类,不允许一个类直接继承多个类,但一个类可以被多个类继承。
③可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A。
④子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在的构造方法中可使用语句super(参数列表)调用父类的某个构造方法。
⑤如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。如果子类构造方法中没有显式地调用父类构造方法,而父类中又没有无参数的构造方法,则编译出错。所以,我们在定义类时,只要定义了有参数的构造方法,通常都还需要定义一个无参数的构造方法。

覆盖父类的方法
在子类中可以根据需要对从父类中继承来的方法进行改造——方法的覆盖(也叫重写)。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限,如:父类中的方法是public,子类的方法就不能使private。
如果在子类中项调用父类中的那个被覆盖的方法,可以用 super.方法 的格式如 super.getInfo() 。

final关键字
①在Java中声明类、属性和方法时,可使用关键字final来修饰。
②final标记的类不能被继承。
③final标记的方法不能被子类重写。
④final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
⑤方法中定义的内之类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是一个常量,她得生命周期超出方法运行的生命周期。但这个“常量”也只能在这个类的内部使用,不能在类的外部直接使用。
当我们用public static final共同标记常量时,这个常量就成了全局的变量。而且这样定义的常量也只能在定义时赋值,即使在构造函数里面也不能对其进行赋值。

抽象类
①抽象类必须用abstract关键字来修饰;抽象方法也必须用abstract来修饰。
②抽象类不能被实例化,也就是不能用new关键字去产生对象。
③抽象方法只需声明,而不需实现。
④含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类。
抽象方法的写法:abstract 返回值类型抽象方法(参数列表);

接口
接口是一种特殊的抽象类,只包含常量和方法的定义,而没有变量和方法的实现。在接口定义中,即使没有显式地将其中的成员用public关键字标识,但这些成员都是public访问类型的。接口里的变量默认是用 public static final 标识的,所以,接口中定义的变量都是全局静态常量。
可以定义一个新的接口,用extends关键字去继承一个已有的接口;也可以定义一个类,用implements关键字去实现一个接口中的所有方法;还可以去定义一个抽象类。
一个类可以在继承一个父类的同时,实现一个或者多个接口,extends关键字必须位于implements关键字之前。 class Student extends Person implements Runer,Study,...{}
父类与子类的转换:子类能完成父类所能做的所有工作,但父类不能完成经过功能扩展后的子类所能做的所有工作。

object类是所有类的父类。


构造方法的一般特征:
①它具有与类相同的名称;
②它不含返回值。(不用加void,写上void就不是构造方法了)
③它不能再方法中用return语句返回一个值。
说明:构造方法可以传入参数。每个类里至少有一个构造方法,如果程序员没有定义构造方法,系统回自动为这个类产生一个默认的空的构造方法。构造方法一般是public的,因为在类外对象实例化时,构造方法会被调用,如果设为private编译时会报错。