Java基础之三个修饰符

三个关键字 抽象的(abstract) 静态(static) 最终的(final)

一、抽象

1.1 什么是抽象

似是而非的,像却又不是;具备某种对象的特征,但不完整。

二、 抽象的(abstract)

2.2 不该被创建的对象

  • 程序是用来模拟现实世界、解决现实问题的;

  • 现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象,所以,Animal不应该被独立创建成对象。
    如何限制这种对象的创建?

三、抽象类、抽象方法

3.1 抽象类

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

  • 被abstract修饰的类,称为抽象类。

  • 抽象类意为不够完整的类、不够具体的类,

  • 抽象类对象无法独立存在,即不能new对象。

3.2 抽象类的作用

  • 作用:

  • 可被子类继承,提供共性属性和方法。

  • 可声明为引用,更自然的使用多态。

  • 经验:

  • 抽象父类,可作为子类的组成部分。

  • 依附于子类对象存在。

  • 由父类共性 子类独有组成完整的子类对象。

3.3 不该被实现的方法

需求:

  • Dog中的eat()应输出“狗在狗粮”。

  • Cat中的eat()应输出“猫在猫粮”。

3.4 抽象方法

public class Test {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{@Overridepublic void eat() {System.out.println("狗吃狗粮");}}//猫类(子类)继承父类class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃猫粮");}}

四、静态的(static)

4.3 什么是静态

概念:

  • 静态(static)可以修饰属性和方法。

  • 称为静态属性(类属性)、静态方法(类方法)。

  • 静态成员是全类所有对象共享的成员。

  • 在全类中只有一份,不因创建多个对象而产生多份。

  • 不必创建对象,可直接通过类名访问。

4.4 课堂案例

练习:统计一个类的对象被创建过多少次?

//创建一个学生类public class Student { static int count; public Student() { //count用于统计被创建的次数 count  ; }
public static void main(String[] args) {//创建对象Student a= new Student();new Student();new Student();new Student();new Student();new Student();new Student();new Student();System.out.println(a.count);}

五、静态方法、类加载

5.1 静态方法

5.2 静态的特点

  • 静态方法允许直接访问静态成员。

  • 静态方法不能直接访问非静态成员。

  • 静态方法中不允许使用this或是super关键字。

  • 静态方法可以继承,不能重写、没有多态。

5.3 动态代码块

示例:

public class xxx {public static void main(String[] args) {new test();}}
class test {int b = 200;{System.out.println(b);System.out.println("这是动态代码块");}}

5.4 类加载

JVM首次使用某个类时,需通过CLASSPATH查找该类的.class文件。

  • 将.class文件中对类的描述信息加载到内存中,进行保存。

  • 如:包名、类名、父类、属性、方法、构造方法…

  • 加载时机:

  • 创建对象。

  • 创建子类对象。

  • 访问静态属性。

  • 调用静态方法。

  • 主动加载:Class.forName(“全限定名”);

5.4 静态代码块

示例:

public class xxx {public static void main(String[] args) {new test();}}class test {static int a = 100;int b = 200;{System.out.println(b);System.out.println("这是动态代码块");}static {//静态代码块System.out.println(a);System.out.println("静态代码块");}public test() {System.out.println("这是构造方法");}}

运行结果:
观察输出顺序

六、最终的(final)

6.1 什么是最终

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

  • final可修饰的内容:

  • 类(最终类)

  • 方法(最终方法)

  • 变量(最终变量)

6.2 final类

  • final修饰类:此类不能被继承。

  • String、Math、System均为final修饰的类,不能被继承。

  • final修饰方法:此方法不能被覆盖。

  • 意为最终方法,不支持子类以覆盖的形式修改。

6.3 final变量

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

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

6.4 实例常量

  • 实例常量不再提供默认值,必须手动赋予初始值。

  • 赋值时机:显示初始化、动态代码块、构造方法。

  • 注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。

6.5 静态常量

  • 静态常量不再提供默认值,必须手动赋予初始值。

  • 赋值时机:显示初始化、静态代码块。

6.6 总结

final修饰类:此类不能被继承。
final修饰方法:此方法不能被覆盖。

final修饰变量:此变量值不能被改变。(无初始值、只允许赋值一次)。
局部常量:显示初始化。
实例常量:显示初始化、动态代码块、构造方法。。
静态常量:显示初始化、静态代码块。
实例常量:显示初始化、动态代码块、构造方法.静态常量:显示初始化、静态代码块.

基本类型常量:值不可变。

引用类型常量:地址不可变。地址里面的内容可以改变
示例:

public class text {public static void main(String[] args) {final int [] a= {7,8,9};System.out.println("赋值前:");for(int i=0;i<a.length;i  ) {System.out.print(a[i] "\t\t");a[i]=i;}System.out.println();System.out.println("赋值后:");for(int j:a) {System.out.print(j "\t\t");}}}

运行结果:

(0)

相关推荐

  • Java中的static关键字和new关键字作用介绍

    一.static关键字的作用 1.可以用于修改类的成员变量.代码块和类 通过static可以将类的成员声明为静态成员,静态的成员归属于整个类,而不是属于某个对象.无论通过类还是对象访问静态成员,操作的 ...

  • Java基础知识面试题(2020最新版)

    文章目录 Java概述 何为编程 什么是Java jdk1.5之后的三大版本 JVM.JRE和JDK的关系 什么是跨平台性?原理是什么 Java语言有哪些特点 什么是字节码?采用字节码的最大好处是什么 ...

  • Java基础整理(全是干货)

    一.hashMap与hashTable与ConcurrentHashMap: 1.HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类.不过它们都同时实现 ...

  • java面向对象高级

    目录 1.类变量(静态类变量) 2.静态方法 3.Main()方法 4.代码块 5.单例模式 6.抽象类 6.1.抽象类的介绍 6.2.抽象类的特点 6.3.多态在抽象类的体现 6.4.抽象类体现了模 ...

  • Java语言中的修饰符—static

    没有经过全文修饰的文章,读起来就会显得苍白无力,而善于用贴切修饰词的文章则能更形象地呈现主题,而在Java编程中也提供了一些修饰语,它们可以修饰类.变量和方法.对修饰符的灵活使用将大大提高软件的重用性 ...

  • Java基础之:访问修饰符

    Java基础之:访问修饰符 java提供四种访问控制修饰符号控制方法和属性(成员变量/字段)的访问权限(范围): 1) 公开级别:用public 修饰,对外公开 2) 受保护级别:用protected ...

  • Java中常用修饰符浅谈

    一.public.protected.default和private修饰符的作用域 public:在java程序中,如果将属性和方法定义为 public 类型,那么此属性和方法所在的类和及其子类,同一 ...

  • C++基础知识篇:C++ 修饰符类型

    C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. C/C++的学习裙[七一二 二八四 七零五 ],无论你是小白还是 ...

  • 一文讲解Java修饰符判断

    Java反射包里有一个类叫Modifier.里面有许多判断是否public,private等 比如,判断修饰符是否是public public static boolean isPublic(int ...

  • WEB前端第三十九课——HTML正则表达式-基础、修饰符、检索模式

    WEB前端第三十九课——HTML正则表达式-基础、修饰符、检索模式

  • Java基础之:泛型

    Java基础之:泛型 在不使用泛型的情况下,在ArrayList 中,添加3个Dog. Dog对象含有name 和 age, 并输出name 和 age (要求使用getXxx()). package ...

  • Java 基础知识

    Java 基础知识

  • Java 基础语法

    注释 #单行注释 // 这里是单行注释 #多行注释 /* 这里是 多行注释 */ #JavaDoc /* *@Description: *@Author: */ Java可以使用中文命名 但不建议使用 ...