一、 static
- static的注意事项
A:静态方法不可以调用非静态变量或方法,static是随类的加载而加载,可以使用类名直接调用。而非静态成员变量或方法只有创建了对象才会为其分配空间。
B:静态方法优于类的对象创建,不属于任何一个对象,因此没有this指针。 - 例子:Math类 是个工具类其所有方法都是静态的,因此不用也没法创建对象,因为Math的构造方法是私有的(private)
A:常用方法:
static double floor(double a)//下取整。小数点位不论其是否大于5都下取整
static double ceil(double a)//上取整。小数点位不论其是否大于5都下取整
static int round(float a)//四舍五入
static double pow(double a, double b) 返回第一个参数的第二个参数次幂的值。
static int max(int a, int b) 返回两个 int 值中较大的一个。还有与之相反的
static double random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
二、 代码块 { }
- 定义:一对花括号括起来的内容。如一个函数,代码块也可以是没有函数名、权限修饰、返回类型的。 如:
{
System.out.println(“hello”);
}
- 分类:局部代码块、构造代码块、静态代码块、同步代码块。
(A)局部代码块:存在于方法中,不存在于方法就是构造代码块了,控制变量的生命周期。前几篇文章说过每个类创建的变量或者方法都是在他对应的花括号里面起作用的。那么局部代码块就有效的缩短了局部变量的生命周期。局部代码块里面的变量出来局部代码块就不能被使用了。变量生命周期变短,不需要等方法调用完毕才释放以节省空间。
(B)构造代码块:只有在创建对象的时候才会被调用,是用于抽取创建对象的共性。
如:每创建一个老师就是说句hello。
class Teacher{
private String name;
private String age;
{
System.out.println("hello");
}
public Teacher() {
}
public Teacher(String name, String age) {
this.name = name;
this.age = age;
}
}
©静态代码块:有点和静态变量和静态方法相识,随着类的加载而加载(使用类名的时候)。因此无论如何都是执行一次(创建第一个类对象时、第一次调用类的静态方法时)。于对象无关。 涉及应用:加载类时需要做的一些初始化,例如加载驱动等。
class Teacher{
private String name;
private String age;
static{//就是static修饰的构造代码块
System.out.println("hello");
}
public Teacher() {
}
public Teacher(String name, String age) {
this.name = name;
this.age = age;
}
}
(D)同步代码块:还未涉及。
- 他们的执行顺序 :静态代码块—构造代码块—局部代码块。
三、 继承
- Java语言中的继承特点:
A:Java是单继承语言(一个人只能有一个爹,因此也是只能有一个爷爷…因此类推),因为可能在不同的父类中有相同的方法。
B:Java语言支持多层继承。 - 继承中成员的特点:
A:子类只能继承父类的非私有成员和方法。 - Java使用原则是就近原则:子类的变量名或方法与父类重复,子类对象调用的是子类的变量和方法。局部变量也是。
重写和重载的区别:重写是重写父类的方法。重写有权限限制,要求重写的方法权限必须大于等于他的权限。权限由小到大为 private—default—public。
重载是方法的参数类型不同、参数个数不同,与返回值无关。 - super:每个类调用构造方法时执行的第一行代码都是隐含的调用父类构造(也可自己选择调用哪个构造方法)。可以获取父类的成员变量和方法,与this相似但不能调用私有变量和方法。
- 继承的优缺点
A:提高了代码的可维护性。例如子类需要更新,直接在父类中定义更新方法就可以了。
B:开发原则是高内聚低耦合,内聚是指自己完成某件事的能力。耦合是指对其他类的依赖。人生何尝不是这样。
四、 abstract
- 非抽象类继承了一个抽象类时,必须重写他所有的抽象方法。
- final 可以修饰变量 、方法、类。修饰的变量无法修改值、类无法被继承、方法不能被重写。
- 抽象类也是有构造函数的。因为有需要为其变量初始化,被继承的时候子类要调用父类的构造函数。但是不能被实例化。抽象类其实质就是找共性成员变量、成员方法。都是所要继承他的类的共性。
- 抽象类可不可以没有抽象方法?可以,但是实际意义不大。抽象方法还有规范的作用必须按照规定的返回值,用一样的参数。