首页 > 其他 > 详细

final关键字+static关键字+匿名对象

时间:2019-08-08 01:40:21      阅读:155      评论:0      收藏:0      [点我收藏+]

接上文,我们学习完构造方法+this+super关键字后,发现有时在代码中出现的final和static关键字非常眼熟,但是他们是什么意思呢?

首先,我们需要从封装、继承、多态开始想起,继承的主要意义在于子类完全继承父类中的属性和方法,但有的方法或属性我们不想被继承怎么办?删除是不可能被删除的,只能靠阻止被继承来解决这个问题,那么就用到了final关键字了,它作为存在于方法中的修饰符,可以修饰类,类的成员变量,方法,局部变量,高亮,它不能修饰构造方法,为啥呢?因为构造方法没有修饰符和返回值。初步了解final后我们可以深入了解它。

1、final修饰的不能被继承,但能继承其他的类

public class fu()

public final class zi extends fu(){}//可继承fu,不能被下面重写

2、final修饰的方法不能被重写,但可以继承使用

class fu{

public final void cat(){}

public void dog(){}

}

//子类继承

public void eat extends fu(){

  public dog(){}//可继承普通方法

   }

3、final修饰的为常量,一次修改后面不可修改

 final int i=10;//变成了常量,后面不可修改

4、final修饰的成员变量和需要在创建对象前赋值

public class fu{

  final int a=1;//直接赋值

  final int b;//如果没有赋值怎么办?用专门用来赋值的构造方法

public zi(){

  b=5;

system.out.in(b);//5

  }

}

5.final修饰的引用数据类型不能更改地址,但可以更改地址内的属性,如

final student s=new student(); s是存储的地址

student s1=new student();

s=s1;//地址没有变化

s.name="李四";

二、static静态修饰符

它的出现是为了解决我们用对象名.方法名()调取不到类里特定的数据,用静态修饰符来实现。

它的位置尤其重要,一般的关键字都跟随方法进栈,但它却是随着main方法直接进堆,也就是说当我们程序还没有在栈运行的时候,静态修饰符已经通过构造方法赋上初值了。

下面我们举例和画一个static内存图来详细了解下它的区别。

 

package com.oracle.demo01;
public class Student {
    private String name;
    //static静态变成类的
    //静态不能访问非静态,因为非静态不在方法与数据共享区
    //尽量用类名方式访问
    public  static  String schoolName;
    public static final String ClASS_NAME="0611";
    //构造函数
    public Student(String name, String schoolName) {
        super();
        this.name = name;
        //本类对象不合适
        //this.schoolName = schoolName;
    }
    //封装
    public String getName() {
        return name;
    }
    /*public void setName(String name) {
        this.name = name;
    }*/
    public String getSchoolName() {
        return schoolName;
    }
    /*public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }*/
    public static void sho(){
        System.out.println("我是一个静态方法");
    }
}

 

package com.oracle.demo01;

public class Demo01 {
public static void main(String[] args) {
    //构造函数的调取
    Student.schoolName="人民大学";//直接给静态赋值人民大学,后面输出只有人民大学了。
    Student stu=new Student("张三","清华大学");
    Student stu1=new Student("李四","北京大学");
    System.out.println(stu.getName()+"..."+stu.getSchoolName());
    System.out.println(stu1.getName()+"..."+stu1.getSchoolName());
    //对象名.方法名,调取普通方法
    Student.sho();
    //打印静态常量
   //静态调取==类名.静态()
    System.out.println(Student.ClASS_NAME);后面只能输出0611
    System.out.println(Math.PI);
    }
}

技术分享图片

三、匿名对象

匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

 

创建一个普通对象

 

Person p = new Person();

 

 

 

创建一个匿名对象

 

new Person();

匿名对象的特点:

 

创建匿名对象直接使用,没有变量名。

 

new Person().eat()  //eat方法被一个没有名字的Person对象调用了。

 

 

匿名对象在没有指定其引用变量时,只能使用一次。

 

new Person().eat(); 创建一个匿名对象,调用eat方法

 

new Person().eat(); 想再次调用eat方法,重新创建了一个匿名对象

 

 

匿名对象可以作为方法接收的参数、方法返回值使用

 

class Demo {

 

public static Person getPerson(){

 

//普通方式

 

//Person p = new Person();

 

//return p;

 

//匿名对象作为方法返回值

 

return new Person();

 

}

 

 public static void method(Person p){}

 

}

 

 

 

class Test {

 

public static void main(String[] args) {

 

//调用getPerson方法,得到一个Person对象

 

Person person = Demo.getPerson();

 

//调用method方法

 

Demo.method(person);

 

//匿名对象作为方法接收的参数

 

Demo.method(new Person());

 

  }

 

}

 

final关键字+static关键字+匿名对象

原文:https://www.cnblogs.com/a199706/p/11315006.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!