Java 面向对象 05 static、final、匿名对象

本文详细介绍了Java中static和final关键字的使用方法及其特点。static用于定义类成员的静态属性和方法,允许不实例化类就能访问。final则用于确保类、方法或变量不可更改或重写。此外还探讨了匿名对象的概念。
摘要由CSDN通过智能技术生成

1 static关键字

1)介绍

在类中,不创建对象来调用方法。通过static关键字来实现。static是静态修饰符,一般用来修饰类中的成员。

2)static特点
  • 被static修饰的成员变量属于类,但不属于这个类的某个对象(也可以说是,多个对象共享同一个static成员变量)。
class Demo {
    public static int num = 100;
}
class Test {
    public static void main(String[] args) {
        Demo d1 = new Demo();
        Demo d2 = new Demo();
        d1.num = 200;
        System.out.println(d1.num); //结果为200
        System.out.println(d2.num); //结果为200
    }
}
  • 被static修饰的成员可以并且建议使用类名来访问。
class Demo {
    //静态成员变量
    public static int num = 100;
    //静态方法
    public static void method(){
        System.out.println("静态方法");
    }
}
class Test {
    public static void main(String[] args) {
        // 使用类名来访问成员变量
        System.out.println(Demo.num);
        // 使用类名来访问成员方法
        Demo.method();
    }
}
3)注意事项
  1. 静态内容是优先于对象存在,不能使用this、super来访问。静态修饰的内容存于静态区。
  2. 同一个类中,静态方法中只能访问静态成员变量或静态成员方法。
  3. main方法为静态方法仅仅是程序执行入口,不属于任何一个对象,可以定义在任何一个类中。
4)定义静态常量
// 格式
public static final 数据类型 变量名 = 值;

注意:

  • 变量名应全部大写,多个单词使用下划线连接。
  • 当想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。
  • 接口中的每个成员变量都默认使用public static final 修饰,所有接口中的成员变量已是静态变量,由于没有构造方法,所以必须显式赋值。可以直接用接口名访问
interface Inter {
    public static final int COUNT = 100;
}
// 访问接口中的静态变量
Inter.COUNT

2 final关键字

1)介绍

why?有些类在描述完之后,不想被继承;或者有些类中的部分方法功能是固定的,不想让子类重写。

how?使用final关键字可以实现上述需求。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。

2)final 特点
  • final修饰类不可以被继承,但是可以继承其他类。
  • final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。
  • final修饰的变量称为常量,这些变量只能赋值一次。
  • 引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改。
final Person p = new Person();
Person p2 = new Person();
p = p2; // final修饰的变量p,所记录的地址值不能改变
p.name = "小明";// 可以更改p对象中name属性值
  • 修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,在多个构造方法中均需要为其赋值。)
class Demo {
    // 直接赋值
    final int m = 100;
    // final修饰的成员变量,需要在创建对象前赋值,否则报错。
    final int n; 
    public Demo(){
        // 可以在创建对象时所调用的构造方法中,为变量n赋值
        n = 2016;
    }
}

3 匿名对象

1)介绍

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

示例:

// 创建一个类
public class Person{
    public void eat(){
        System.out.println();
    }
}
// 创建一个普通对象
Person p = new Person();
// 创建一个匿名对象
new Person();
2)特点
  • 创建匿名对象直接使用,没有变量名。
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());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值