final、static、匿名

讲解作业

空参的快捷键 :

//空参  Alt+Shift+s -----Generate Constructor using Fields
    public Employee(){
        
    }
    public Employee(String ename,int eid,int salary){
        this.ename=ename;
        this.eid=eid;
        this.salary=salary;
    }

Final 关键字

特点          写在 public 后 class前

修饰类:不可被继承 ,但可继承其他类(太监类)

修饰方法:不可以被子类重写,但继承使用

修饰局部变量: 一次赋值,终身不变  相当于常量

 

final int a = 20;
a = 30; //赋值报错,final修饰的变量只能赋值一次

 

 

修饰引用类型的变量值为对象地址值,地址值不能改,对象属性可以改。

final Person p = new Person();
Person p2 = new Person();
p = p2; //final修饰的变量p,所记录的地址值不能改变
p.name = "张三";//可以更改p对象中name属性值
//p 是无法更改,只能改属性值

修饰成员变量:当final修饰成员变量时 ,必须定义就赋值。终身不变或者用构造方法

pm

Static 关键字

 静态修饰符,一般修饰类中成员变量和方法

特点:

不可以被继承,但可以继承其他类

class Yy {}
final class Fu extends Yy{} //可以继承Yy类
class Zi extends Fu{} //不能继承Fu类(不可以当父亲)

修饰成员变量:

被static修饰的成员变量属于类,不属于这个类的某个对象(static在类中修改了变量值,其他对象中的static成员变量值跟着改变,多个对象共享同一个static成员变量

private String name;
    private int age;
    //用static修饰这个变量
    public static String schoolname="山东大学";
-----------------------------------------
public static void main(String[] args) {    
       //18后面可以不用写"山东大学"  因为static在类中已经修饰过
    Students s1=new Students("张三",18,"山东大学");//被static在类中赋值后,在调用,就不需要在写属性值,
    Students s2=new Students("李四",18);
    Students s3=new Students("王五",18);
    Students s4=new Students("赵六",18);  
//类名.变量名
    Students.schoolname="北京大学";
    System.out.println(Students.schoolname);
    //类名。方法名()
    Students.show();
    }

在静态前:

静态后:

修饰成员方法:

类名.静态成员变量名

类名.静态成员方法名(参数)

对象名.静态成员变量名       ------不建议使用该方式,会出现警告

对象名.静态成员方法名(参数)     ------不建议使用该方式,会出现警告

 

class Student {
    //静态成员变量
    public static int num = 100;
    //静态方法
    public static void show(){
        System.out.println("静态方法");
    }
}
class Demo {
    public static void main(String[] args) {
        System.out.println(Demo.num);
        Demo.show();
    }
}

 

被static修饰后的方法,就属于这个类而不属于它的对象

总结:修饰成员变量和成员方法时:静态不能访问非静态,但非静可以访问静态(先进的不知道后进的  但后进的知道先进的)

注意

静态只能访问静态,静态不能使用 this(本类对象)跟super(父类对象)

main方法里必须有static 原因:main方法是程序入口,不属于任何一对象,由虚拟机调用,它是特殊方法,可定义在任意类中

同一个类中,静态成员只能访问静态成员

class Demo {
    //成员变量
    public int num = 100;
    //静态成员变量
    public static int a = 200;
    //静态方法
    public static void show(){
        //System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
        System.out.println(a);
    }
}

多态调用方法

编译看=左边,父类有,编译成功,父类没有,编译失败

运行,静态方法,运行父类中的静态方法,

运行,非静态方法,运行子类的重写方法

成员变量,编译运行全是父类

定义静态常量

static final  只能在定义时赋值。没有第二种赋值方法

格式:

public static final 数据类型 变量名 = 值;

所有接口中的成员变量已是静态常量,因接口没有构造方法,必须显示赋值。可以直接用接口名访问

interface Show {
    public static final int COUNT = 100;
        Show.COUNT   //直接用接口名访问变量
}        

匿名对象

  创建对象时,只有创建语句,没有对象地址赋值给某个变量

 匿名对象,只能调用一次

 

posted @ 2019-05-21 10:28  zhansen521  阅读(131)  评论(0编辑  收藏  举报