10 Java三个修饰符

简介: 10 Java三个修饰符
10.1 abstract
1.1 不该被创建的对象
  • 程序是用来模拟现实世界、解决现实问题的;
  • 现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象,所以,Animal不应该被独立创建成对象。

如何限制这种对象的创建?

1.2 抽象类

应用:abstract修饰类,此类不能new对象。

  • 被abstract修饰的类,称为抽象类。
  • 抽象类意为不够完整的类、不够具体的类,
  • 抽象类对象无法独立存在,即不能new对象。
1.3 抽象类的作用
  • 作用:
  • 可被子类继承,提供共性属性和方法。
  • 可声明为引用,更自然的使用多态。
  • 经验:
  • 抽象父类,可作为子类的组成部分。
  • 依附于子类对象存在。
  • 由父类共性+子类独有组成完整的子类对象。
1.4 不该被实现的方法

需求:

  • Dog中的eat()应输出“狗在吃骨头”。
  • Cat中的eat()应输出“猫在吃鱼”。

方法声明必要,方法实现多余。

1.5 抽象方法
public class TestAnimal {
  public static void main(String[] args) {
    //Animal animal=new Animal();
    Animal dog=new Dog();
    Animal cat=new Cat();
    
    dog.eat();
    cat.eat();

  }
}

//动物类
abstract class Animal {
  
  String breed;//品种
  int age;//年龄
  String sex;//性别
  
  //吃(抽象方法)
  public abstract void eat();
  //睡
  public void sleep() {
    System.out.println("动物睡...");
  }
}

//狗狗类
class Dog extends Animal{
  @Override
  public void eat() {
    System.out.println("狗在吃骨头");
  }
}

//猫咪类
class Cat extends Animal{
  @Override
  public void eat() {
    System.out.println("猫在吃鱼");
  }
}
2 static

static:表示静态的

  • 可以修饰属性、方法、代码块、内部类
2.1 静态属性

修饰的属性:静态属性(类属性)

静态变量:通过类名.属性名调用

  • 1、在类的对象之间是共享的

应用场景:在多个对象之间共享变量的时候,应该使用静态变量

2.1 静态属性
修饰的属性:静态属性(类属性)

静态变量:通过类名.属性名调用

1、在类的对象之间是共享的
应用场景:在多个对象之间共享变量的时候,应该使用静态变量

pu


//1、创建Student类的对象
Student stu1 = new Student();
Student stu2 = new Student();
stu1.a = 10;
stu2.a = 20;

//实例变量在多个对象之间是独立的
System.out.println(stu1.a); //10
System.out.println(stu2.a); //20 

//静态变量在多个对象时间是共享的
stu1.b = 100;
stu2.b = 200;
System.out.println(stu1.b);//200
System.out.println(stu2.b);//200

//静态属性正确的调用方式:类名.属性名调用
Student.b = 300;
2.2 静态方法

static修饰方法:静态方法、类方法

静态方法:通过类名.方法名调用

  • 1、静态方法只能调用静态的属性和静态的方法
  • 2、静态方法中不能使用this和super关键字
  • 3、抽象方法不能使用static修饰
  • 4、静态方法不能被重写,但是可以被继承

应用场景:一般在编写的工具类中使用静态方法

public class Student extends Person {
  int a;     //实例变量
  static int b;//类变量  
  public void play1() {
    //访问静态变量
    System.out.println(b);
    //访问静态方法
    play2();
    System.out.println("实例方法");
  } 
  public static void play2() { 
    //访问实例变量a   
        //错误,原因:静态方法,类加载就已经存在,而实例变量要等到类被创建之后才存在
        //System.out.println(a); 
    //调用实例方法paly1();
    //play1();//错误,原因与实例变量一致
    //如果非要调用,那么必须要创建类的对象,通过对象去调用属性和方法
    Student stu = new Student();
    System.out.println(stu.a);
    stu.play1();    
    
    //在静态方法中不能使用this和super关键字
    //System.out.println(this.a);
    //this.play1();
      
    System.out.println("静态方法");
  }
}
2.3 静态代码块

修饰的代码块称之为静态代码块

  • 1、静态代码块在类加载的时候就执行
  • 2、优先于动态代码块
  • 3、只会被执行一次。
public class User { 
  //代码块   在对象被创建的时候自动调用,每次创建对象都会执行。优先于构造方法先执行
  {
    System.out.println("这是非静态代码块");
  }
  //静态代码块   在类被加载的时候自动调用,且只会被调用一次。优先于代码块先执行
  static {
    System.out.println("这是静态代码块");
  } 
  static int a = 10;
  //构造方法
  public User(){
    System.out.println("这是无参构造方法");
  }
}
2.4 类的加载时机

类加载的时机:

  • 1、创建对象
  • 2、创建子类对象
  • 3、调用静态属性和方法
  • 4、Class.forName(“类的全限定名”); 全限定名:包名+类名
2.5 总结

static内存分配

image.png
3 final
3.1 什么是最终

概念:最后的,不可更改的。

  • final可修饰的内容:
  • 类(最终类)
  • 方法(最终方法)
  • 变量(最终变量)
3.2 final类
  • final修饰类:此类不能被继承。
  • String、Math、System均为final修饰的类,不能被继承。
  • final修饰方法:此方法不能被覆盖。
  • 意为最终方法,不支持子类以覆盖的形式修改。
3.3 final变量

final修饰变量:此变量值不能被改变(常量)。

所有final修饰的变量只能赋值一次,值不允许改变。

3.4 实例常量
  • 实例常量不再提供默认值,必须手动赋予初始值。
  • 赋值时机:显示初始化、动态代码块、构造方法。
  • 注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。
3.5 静态常量
  • 静态常量不再提供默认值,必须手动赋予初始值。
  • 赋值时机:显示初始化、静态代码块。
3.6 对象常量
  • final修饰基本类型:值不可变
  • final修饰引用类型:地址不可变


目录
相关文章
|
29天前
|
前端开发 Java 数据安全/隐私保护
Java修饰符
Java修饰符
29 9
|
2月前
|
前端开发 JavaScript Java
【前端学java】java中final修饰符(6)
【8月更文挑战第9天】java中final修饰符(6)
33 2
|
5月前
|
前端开发 Java 数据安全/隐私保护
Java 修饰符
4月更文挑战第7天
|
5月前
|
Java
[Java 基础] Java修饰符
[Java 基础] Java修饰符
|
Java 程序员 数据安全/隐私保护
Java的访问修饰符
为了实现面向对象程序设计(OOP)的封装这个特性,需要程序设计语言提供一定的语法机制来支持。这个语法机制就是访问权限控制(访问修饰符:public、protected、private、default)。
102 0
|
Java
java访问修饰符
1.分类 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 public : 对所有类可见。使用对象:类、接口、变量、方法 protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。 default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类) 我们可以通过以下表来说明访问权限:
70 0
java访问修饰符
|
Java 数据安全/隐私保护
Java访问修饰符
1.基本介绍 Java提供了四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围): 1)公开级别:用public修饰,对外公开 2)受保护级别:用protected修饰,对子类和同一个包中的类公开 3)默认级别:没有访问修饰符号,向同一个包的类公开 4)私有级别:用private修饰,只有类本身可以访问,不对外公开 ———————————————— 版权声明:本文为CSDN博主「yqd666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/y516369/article/details/
100 0
Java访问修饰符
|
前端开发 Java
java修饰符
java修饰符
56 0
|
Java
Java基础 | 修饰符
Java修饰符
99 0
Java基础 | 修饰符