java三大修饰符

三大修饰符

一.abstract 抽象的
1.方法

​ 被abstract所修饰的方法 被称为抽象方法

a)语法: abstract放置在方法的返回值类型之前 并且与访问权限修饰符顺序无要求
		抽象方法没有方法的实现部分 连{}都没有
		public abstract double area();
		public abstract double girth();
2.类

​ 站在语法的角度:被 abstract所修饰的类被称为抽象类

​ 站在使用的角度:只能被声明 不能被实例化的类 被称为抽象类

a)语法: abstract放置在class关键字之前 并且与访问权限修饰符顺序无要求
		abstract class 类名{


		}
b)特点:
		1)抽象类可以被声明
		2)无法通过new的形式实例化对象
		3)抽象类有构造方法 是在创建其子类时来使用
		4)抽象类必须有子类才有意义
		5)如果一个抽象类的子类 没有实现其所有的抽象方法 那么这个子类也是个抽象类
		6)抽象类中 可以有非抽象方法
e)好处: 强制多态 
		
		思考:
		1)有一个类中有抽象方法 那这个类一定是抽象类吗?
		一定是
		2)一个类中没有抽象方法 这个类一定不是抽象类?
		不一定 抽象类中不一定有抽象方法 
二.static 静态的

​ 静态属性+静态方法 统称为 静态成员

1.属性:static 所修饰的属性被称为静态属性 也叫类变量
类变量:一个类所拥有的变量 是类级别的 该类创建出的所有对象共有 有一个对象改变了类变量 那么所有对象使用类变量时均会受到影响
a)语法: 放置在属性类型之前 并且与访问权限修饰符顺序无要求
	class MyClass{
        int a;
        static int b;
	}
b)调用语法:
	1)通过对象.类变量 
	2)类名.类变量 推荐
2.方法:static 所修饰的属性被称为静态方法
a)语法:放置在返回值类型之前 并且与访问权限修饰符顺序无要求
	public static void m1(){
		System.out.println("这是静态方法m1");
	}
b)调用语法:
	1)通过对象.方法名()
	2)类名.方法名()推荐
c)静态方法的特点:
	静态方法内部可以用什么:
		1)静态方法内部只允许使用静态成员
		2)静态方法内部 不可以使用thissuper关键字
	静态方法关于重载和覆盖的语法:
		1)静态方法可以被重载 符合方法重载的所有语法要求
		2)静态方法可以被继承 也可以被覆盖 但是只能被static所修饰的方法覆盖
		3)静态方法 不存在多态的情况 父类引用指向子类对象 子类中覆盖了父类中的静态方法,父类引用调用该方法时 依然是父类中未被覆盖的方法
3.初始化代码块
a)语法:
	{
		功能性代码:打印输出 属性的赋值语句 声明定义局部变量 调用方法
	}
b)定义位置:类以内 方法以外
c)作用:按照定义的先后顺序 在创建对象的初始化阶段 执行代码块中的代码 一般用来给属性赋值
4.静态初始化代码块
static修饰的代码块 被称为静态代码块
a)语法:
	static {
		功能性代码:打印输出 静态的赋值语句 声明定义局部变量 调用静态方法
	}
注意:静态初始化代码块中 不可以使用非静态成员
b)定义位置:类以内 方法以外
c)作用:按照定义的先后顺序 在类加载时的初始化阶段  执行代码块中的代码 一般用来给静态属赋值  类加载只进行一次
5.类加载
a)类加载:JVM在第一次使用某个类时 会通过CLASSPATH所配的路径 将该类所对应的.class文件中类的相关信息(属性/方法/静态成员/父类信息...)读取到JVM的内存中,并保存起来。
b)类加载的过程: 加载----链接(验证+准备+解析)-----初始化----使用----卸载
	加载:将.class中的信息读取到内存
	验证:验证该.class是否是合法的.class文件 验证相应的访问权限修饰符 
	准备:给类变量分配空间 给类变量赋默认值 重要
	解析:引用替换
	初始化:给类变量进行初始化 执行初始化代码或执行静态初始化代码块中的代码 重要
	使用:在内存中使用类信息
	卸载:将保存的类信息回收
c)类加载(进行到初始化阶段的)触发的时机: 重点
	1)第一次创建对象时
	2)第一次通过类名.静态属性/方法()的形式 调用静态成员时
	3)子类类加载时 其父类如果没有被加载 则也会进行类加载
	4)
	备注:一般 称类加载的时机 就是进行到初始化阶段性的几种情况  因为类加载触发到初始化阶段之前的情况过于复杂 所以不讨论
	
类加载做的两件事:给类变量进行空间分配赋默认值 给类变量进行初始化
6.当一个类的对象第一次被创建时 需要掌握

​ 1.类加载:

​ a)给父类 子类的类变量分配空间赋默认值

​ b)初始化父类的类变量

​ c)初始化子类的类变量

​ 2.对象的构建过程:

​ a)给父类 子类的所有属性分配空间赋默认值

​ b)递归构建父类对象(重复c~d操作)

​ c)属性初始化

​ d)执行构造方法中的内容

三.final 最终的
1.变量 final修饰的变量 被称为常量
final所修饰的变量只能被赋值一次
a)局部变量
	修饰八种基本数据类型的变量:值不可变
	修饰引用类型的时候:地址不可变
b)成员变量
	修饰八种基本数据类型的变量:值不可变
	修饰引用类型的时候:地址不可变
	注意:
		a)final修饰得的成员变量 没有默认值 必须保证在创建对象完成之前给其赋值(初始化阶段/构造方法)
c)类变量
	修饰八种基本数据类型的变量:值不可变
	修饰引用类型的时候:地址不可变
	注意:
		b)final修饰得的类变量 没有默认值 必须保证类变量在类加载结束前被赋值(类加载初始化阶段)
d)如果两个变量都是final所修饰的 则二者进行运算时 a+b的结果会尽可能地转换成类型c 从而编译不会出错
	但当a+b的范围大于类型c时 编译出错
	final 类型a a = 10final 类型b b = 20;
	 类型c  c = a+b;
2.方法 final修饰的方法 被称为最终方法
  final修饰的方法 可以被重载且与final无关
  				可以被继承 但不可以被覆盖

3.类 final修饰的类 被称为最终类 也叫做断子绝孙类
  final修饰的类 所修饰的类不可以被继承

四.小结
1.final static abstract均不可以修饰构造方法
2.一些修饰符不可联用:

​ abstract 与 private

​ abstract 与 static

​ abstract 与 final

3.导入静态资源 JDK1.5之后的新语法
import static 包名.类名.*;倒入该类所有的静态成员
import static 包名.类名.方法名/属性名;倒入该类指定的静态成员
当导入了静态成员时 该静态成员被使用时可以直接通过名字使用 不用加类名.
    
package classes;
import classes2.ClassA;
import static classes2.ClassA.m1;
public class TestStatic4{
	public static void main(String[] args){
		m1();
		System.out.println(ClassA.b);
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值