ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础之三个修饰符

2021-03-20 15:35:16  阅读:152  来源: 互联网

标签:Java 修饰符 System final 三个 println new public out


三个关键字 抽象的(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{
	@Override
	public void eat() {
		System.out.println("狗吃狗粮");
	}
}

//猫类(子类)继承父类
class Cat extends Animal{
	@Override
	public 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");
		}
	}
}

运行结果:
在这里插入图片描述

标签:Java,修饰符,System,final,三个,println,new,public,out
来源: https://blog.csdn.net/weixin_44342118/article/details/115014994

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有