Java学习之修饰符

权限修饰符

名称可以修饰的对象能够被访问的范围
public类(一个文件中只能有一个被public修饰的类),属性,方法,构造方法本类,同包,当前项目中任意类位置只要有对象就可以访问
protected属性,方法,构造方法本类,同包,子类(通过子类对象在子类范围内可以访问)
默认不写类,属性,方法,构造方法本类,同包
private属性,方法,构造方法本类

特征修饰符

final

修饰变量
如果变量没有赋值,给一次机会,如果变量有值,不允许再次改变
变量是基本类型,值不可改变
变量是引用类型,地址引用不可改变
修饰变量
特点与修饰变量类似,修饰属性必须赋初始值,否则编译报错。这是因为变量有默认值null,如果不赋初始值,那么加上final修饰之后,变量的值就已经无法改变了。
修饰属性
方法是最终的不可更改的,方法不能被 子类重写(覆盖)
修饰类
类是最终的(太监类,不能有子类)类不可以被其他子类继承
常见的工具类都是final修饰的,比如String,Math,Scanner,Integer

static

可以修饰:修饰属性 ,修饰方法,修饰块,修饰类(内部类)

特点

  1. 静态元素在类加载时就初始化了,创建的非常早,此时没有创建对象
  2. 静态元素存储在静态元素区中,每一个类有自己的区域,与别的类不冲突
  3. 静态元素只加载一次(只有一份),全部对象及类本身共享
  4. 由于静态元素区加载的时候,有可能没有创建对象,可以通过类名直接访问
  5. 可以理解为静态元素不属于任何一个对象,它属于类
  6. 内存管理,栈内存创建开始用完就回收,堆内存通过GC(垃圾回收机制)回收,静态元素区GC无法管理,可以粗暴任务静态元素时常驻内存
  7. 非静态成员(堆内存对象里)中可以访问静态成员(静态区),
  8. 静态成员中不可以访问非静态成员(个数 一个(静态元素)出发访问一堆相同名字的东西)(静态元素属于类 非静态成员属于对象自己)
  9. 静态元素中不可以出现this或super关键字(因为静态元素属于类)

abstract 抽象的(没有具体的执行,只是个概念)

可以修饰什么?
修饰方法 :用abstract修饰的方法,只有方法的结构,没有方法执行体叫做抽象方法
修饰类 :用abstract修饰的类 叫做抽象类

修饰以后有什么特点?
抽象类中不一定含有抽象方法,抽象方法必须放在抽象类中(或接口中),普通类中不允许含有抽象方法。(通常用来描述事物)

什么是抽象类,抽象类有什么特点?

public abstract A{
	public abstract void fun();
}
抽象类中的成员:
属性 ------- 可以含有一般的属性,也可以含有private static final等
方法 ------- 可以含有一般的方法,也可以含有private static final等
      注意:抽象类中允许含有抽象方法
块 ---------- 可以含有一般的程序块,也可以含有static程序块
构造方法 - 可以含有构造方法,包括重载
抽象类如何使用?
抽象类含有构造方法 但是我们不能通过构造方法直接创建对象
抽象类只能通过子类继承来做事
为什么抽象类不让直接创建对象,还有构造方法?
因为抽象类本身来说属于残次品,功能不全,所以不希望直接创建对象,但是可以通过子类继承来完善功能,所以需要构造方法。
类和类的关系
抽象类 ---- 直接单继承 ---- 抽象类 可以
: 抽象类 ---- 直接单继承 ---- 具体类 可以(但现实不这么干)
具体类 ---- 直接单继承 ---- 抽象类 不可以(要将父类的抽象方法具体化,或者子类也是抽象类)

小问题:
抽象类中可以没有抽象方法,全部都是具体成员
抽象类中可以没有具体成员,全部都是抽象方法 ----> 接口
接口可以理解为抽象类抽象到极致,但还是一个类结构,不用class修饰,改用interface修饰

什么是接口?
接口也是一个类结构,只不过用interface修饰,只定义规则,功能,不描述具体过程

接口中的成员
属性 --------- 不能含有一般属性,只能含有公有的静态的常量 public static final
方法 ---------不能含有一般的方法,只能含有公有的抽象的方法(1.8 可以用default来修饰一般的方法)
块 ------------ 没有块,因为块就是具体的,接口中不可以有具体的成员
构造函数 – 不能含有构造方法
如何使用?能否创建对象?
不能创建对象,只能通过子类多实现(implements)来做事
public class A implements B,C,D{

}

与别的类结构关系
接口 -------- 继承 --------------- 普通类/抽象类 不可以
抽象类 ----- 直接多实现 ------ 接口 可以
具体类 ----- 直接多实现 ------ 接口 不可以(必须将接口中的抽象方法具体化,或者自己变成抽象类)
*接口 ------ 多继承 ------------ 接口 可以直接多实现

native

Java源代码中看到native就已经再也看不见后续代码
后续会调用其他的编程语言C/C++执行内存的操作
Object类中的一个方法 hashCode()
源码 public native int hashCode();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值