java-修饰符

一.static修饰符
修饰成员变量
静态变量:1.能被类的所有实例所共享
2.java虚拟机在加载类的过程中为static变量分配内存,存在方法区
实例变量:1.对于每个类的实例都有一份,它们之间互不影响
2.实例变量在加载类后创建对象时分配内存,存于堆区
修饰成员方法
静态方法
1.不能使用this关键字,因为它并不唯一属于任何一个对象,而是共有的
2.super关键字用来访问当前实例从父类中继承的方法和属性,super关键字
和类的实例有关,所以不能使用super关键字
3.静态方法必须被实现
4.子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类
的静态方法(重写只是根据运行时对象的类型来决定调用哪个方法,而静态
方法是在编译阶段与类进行了绑定,所以说重写对于静态方法是没有作用的,
只不过隐藏了父类的静态方法)
修饰代码块
静态代码块
1.用于初始化类,给静态变量赋初始值
2.如果类中包含多个静态代码块,那么JAVA虚拟机将按照它们在类中的顺序
依次执行它们
3.每个静态代码块只会执行一次

二.final修饰符
修饰类: 1.只能修饰非抽象类(abstract类必须被继承,final类不能被继承)
2.final修饰的类不能被继承,没有子类
修饰方法:1.只能修饰非抽象方法
2.用final修饰的方法不能被子类的方法重写
3.不能修饰构造方法,因为方法重写只出现在类的成员方法,父类的构造方法
和子类的构造方法之间不存在重写关系
修饰变量:1.final可以修饰静态变量、实例变量、局部变量
2.final变量都必须显示初始化,否则会导致编译错误
3.final变量只能赋一次值
特点: 阻止继承和多态
静态变量:定义变量时进行初始化或者在static代码块中赋值
实例变量:可以在定义变量时,或者在构造方法中进行初始化
final static修饰的变量:类加载的时候就已经产生,存储在常量池中,且是唯一的数据
static修饰的变量:类加载的时候就已产生,存储在方法区
final修饰的变量:通过new产生,存储在堆区

三.abstract修饰符
修饰类(抽象类)
1.抽象类可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类
2.抽象类中可以有非抽象的构造方法
抽象类的构造方法:接受子类传来的参数,初始化参数,子类堆
内存的某块位置存放父类的初始化参数
3.抽象类不能被final修饰符修饰
4.抽象类不允许实例化
修饰成员方法(抽象方法)
1.没有抽象构造方法,也没有抽象静态方法
2.抽象方法不能被final修饰符修饰
3.抽象方法没有方法体
不能修饰属性
被abstract修饰的内容都是暂未被实现的,比如:类,方法
属性之所以不能被abstract修饰是因为属性不存在"尚未被实现"的状态

四.接口
1.接口是为了解决java中多继承的问题。
2.抽象类抽象到极致就是接口,接口是抽象类的另外一种形式。
3.定义: 使用interface关键字定义接口
4.成员变量:成员变量默认类型是 public static final类型 必须被显式初始化
成员方法: 不能有方法体.eg:public void show();
可以没有权限修饰符,默认是 public abstract
5.不能有任何形式的代码块
6.接口没有构造方法,不能被实例化–>不能 new 接口名();
7.接口的多继承:
①.一个类只能继承一个父类,但是可以实现多个接口,用逗号隔开。
eg:class Student implements A,B{}
一个类实现了某[多]个接口,就要重写接口中没有实现的方法,不然编译报错。
②.一个接口可以继承多个接口
eg:interface C extends A,B{}
五.抽象类和接口的区别
1.子类只能继承一个抽象类,但可以实现任意多个接口
2.接口中的方法都是抽象方法,抽象类中可以有非抽象方法
3.接口中的成员变量只能是静态常量,抽象类中的成员变量可以是各种类型
4.抽象类中可以有静态方法和静态代码块等,接口中不可以
5.接口中没有构造方法,不能被实例化,抽象类可以有非抽象的构造方法,
抽象类不能被实例化,因为有构造方法未实现
六.访问修饰符
private private修饰的变量
1.本类可以访问
2.通过反射访问
private限权的成员变量,继承的子类具有私有变量的拥有权,但是没有使用权
没有访问控制符
1.只能本类和同包的类访问
2.子类没有访问权,也就不能掉用default修饰的方法,所以不能重写
protected 只能本类、同包的类以及子类访问
public 所有类都能访问
一个java文件中,public类只能出现一个
七.包装器
包装器类型都重写了equals方法

  1. boolean Boolean
    byte Byte
    short Short
    char Character
    int Integer
    long Long
    float Float
    double Double
    2.自动装箱和自动拆箱
    在jdk1.5以后 基本数据类型和其包装器类型之间有自动装箱和拆箱过程。
    注:是发生在编译阶段。
    自动装箱: Integer i1 = 128; ----> Integer i1 = Integer.valueOf(128);
    Integer i2 = 127; ----> Integer i2 = Integer.valueOf(127);
    自动拆箱: int a1 = i1; ----> int a1 = i1.intValue();
    int a2 = i2; ----> int a2 = i2.intValue();
    Integer a = 128 , Integer b = 128;a == b ?—>flase
    Integer a = 127 , Integer b = 127;a == b ?—>true/false
    自动装箱的时候,如果这个数字在[-128~127]之间那么就是从缓存中获取数据。
    如果这个数字不在范围内,那么就是利用new关键字创建Integer对象()。
    intValue(): 以 int 类型返回该Integer的值。即返回的是栈中字面量的地址。
    当int 和 Integer互相转换的时候会发生自动装箱和自动拆箱。

    parseInt: Integer.parseInt(“全数字字符串”); 把全数字的字符串转为int类型数据
    int a = Integer.parseInt(“123”);—> int : 123;
    Integer.MAX_VALUE : 它表示 int 类型能够表示的最大值。
    Integer.MIN_VALUE : 它表示 int 类型能够表示的最小值。
    Integer.SIZE : 用来以二进制补码形式表示 int 值的比特位数。
    八.== 和 equals()区别
    1.== 定义:比较内存地址是否相同。
    2.equals()定义:Object类中的方法,Object中的equals()是比较内存地址是否相同。
    注意:equals(Obj)是一个方法,所以只能是对象调用。equals是一个方法,所以可能被重写。
    3.String类重写了equals()方法,所以在String对象调用equals时是比较值。
    补充:
    toString():当system输出对象的时候,其实是输出对象.toString();可以重写。
    getClass():返回当前的真实对象,不可以重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值