【Java】类和对象2

类和对象2

访问限定符

1.限定符

  • 影响的是访问权限
  • 两种情况:
    修饰顶级(Top level)
    修饰成员级(Member level)
    四种访问限定符:
说法定义语法说明
publicpublic所有类都有访问权限
package private空白只有一个包的类有访问权限
protectedprotected同类、同包、子类(不同包)
privateprivate只有本类有访问权限
a包的A类定义的属性a包的A类方法中a包下的B类方法中b包的C类方法中
public
package private没有
private没有没有

静态方法 / 静态属性

  • 方法
    普通方法(方法)
    静态方法(类方法)
  • 属性
    普通属性(属性)
    静态属性(类属性)
语法

static关键字:

  • 被static修饰的属性是静态属性
  • 被static修饰的方法是静态方法

理解:

  • 普通属性 /普通方法
    都绑定着一个隐含着的对象(this)
  • static 的含义就是和对象解绑
    1.静态属性不再保存在对象(堆区)中,而是保存在类(方法区)中
    2.静态方法调用时,没有隐含着的对象,所以也就无法使用this关键字
访问静态属性 /调用静态方法语法

类的内部:
访问属性:

  1. 属性名称;
  2. 类名称.属性名称;
  3. this.属性名称; //保证当前方法不是静态方法

调用方法:

  1. 方法名称(实参列表);
  2. 类名称.方法名称(实参列表);
  3. this.方法名称(实参列表); //保证当前方法不是静态方法

类的外部:
访问属性:

  1. 类名称.属性名称
  2. 对象的引用,属性名称

调用方法:

  1. 类名称.方法名称(实参列表);
  2. 对象的引用.方法名称(实参列表);

强调:

在静态方法(静态上下文)中,因为没有隐式的对象和该方法绑定,所以:

  1. 不能访问普通属性;
  2. 不能调用普通方法;
  3. 无法使用this关键字;
  4. 表现出来的特性:一个类的所有的对象是可以共享静态属性的;
普通属性/静态属性的初始化规则

普通属性:发生在对象的实例化的时候
方式:

  • 定义时初始化
int a=10;
  • 构造代码块
{
     a=10}
  • 在构造方法中初始化
Person() 
{
 	a=10;
}

初始化顺序:定义时和构造代码块按照定义顺序的先后优先执行,最后执行构造方法;
静态属性:发生在类被加载的时候
方式:

  • 定义时初始化
 static  int a=10;
  • 静态构造代码块
static
{
	 a=20;
}

初始化顺序:按照定义顺序的先后执行;
总结属性的初始化顺序:

  1. 类的加载一定发生对象实例化之前;
    即静态属性的初始化一定在普通属性的初始化之前;

  2. 静态属性初始化顺序:按照定义类时的书写顺序初始化

  3. 普通属性初始化顺序:定义时和构造代码块按书写顺序初始化
    构造方法中的初始化一定发生在最后,和书写顺序无关

了解:

  • 类的信息一开始是以字节码(bytecode)*.class形式保存在磁盘上的;
  • 类的加载过程:
    即类加载器在对象的目录上找到指定类的字节码文件,并且进行解析,然后放到内存的方法区的过程;
    类只有在被使用到的时候才会进行加载
    1)用类去实例化对象
    2)调用静态方法
    3)访问静态属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值