Java - 15 作用域+访问修饰符

Java - 15 作用域+访问修饰符

全局变量与局部变量

class Cat{
	int age = 1; // 全局变量(属性),作用域是整个cat类
    {
        int num = 100; // 代码块中 - 局部变量
    }
    public void say(){
		String greet = "hello"; // 局部变量(除了属性之外就是局部变量),只能在say方法中使用
        System.out.println(age);
    }
}
  • 属性(全局变量)不赋值也可以直接使用,有默认值,规则和数组一致、
  • 局部变量必须赋值后才能使用,没有默认值
  • 属性和局部变量可以重名,遵循就近原则
  • 同一作用域中,局部变量不能重名
  • 属性生命周期长,伴随对象的创建而创建,伴随对象的销毁而销毁
  • 局部变量生命周期短,伴随代码块的执行而创建,伴随代码块的结束而销毁
  • 全局变量可以被本类或其它类使用

  • 局部变量只能在本类中对应方法使用

  • 属性可以加修饰符
  • 局部变量不能加修饰符

访问修饰符

修饰类中的属性成员方法(构造器),

pubic 对外公开

protected 对子类和同一个包中的类公开

默认 向同一个包的类公开

private 只有类本身可以访问,不对外公开

修饰属性/方法 本类/同类 同包 子类 不同包
public (可以修饰类)
protected ×
默认 (可以修饰类) × ×
private × × ×

举例

  • 同类
package com.wxr.modifier;

public class A{
    public int n1 = 100;
    protected int n2 = 200;
    int n3 = 300;
    private int n4 = 400;
    
    public void m1{
        System.out.println(n1); // 该方法可以访问4个属性
        System.out.println(n2); 
        System.out.println(n3);
        System.out.println(n4);
    }
}
  • 同包
package com.wxr.modifier;

public class B{

    public void m2{
        A a = new A(); // 同一个包,不用import
        System.out.println(a.n1);
        System.out.println(a.n2);
        System.out.println(a.n3);
    }
}
  • 子类(继承)

  • 不同包

package com.wxr.pkg;

import com.wxr.modifier.A;

public class C{ 
    public void m3{
        A a = new A();
        System.out.println(a.n1);
    }
}

成员方法的访问规则和属性完全一样

posted @   wajiez  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示