内部类关键字

内部类

内部类(inner class)是定义在另一个类中的类。

为什么需要使用内部类呢?

  • 内部类可以对同一个包中的其他类隐藏
  • 内部类方法可以访问定义这个类的作用域中的数据,包括原本的私有数据
public class Test01 {
	private int a = 10;
	private String b = "hello";

	public int getA() {
		return a;
	}

	public void setA(int a) {
		this.a = a;
	}

	public String getB() {
		return b;
	}

	public void setB(String b) {
		this.b = b;
	}

	class Inner {
		public void innerPrint() {
			System.out.println(a);
			System.out.println(b);

			setA(20);
			System.out.println(getA());
			setB("world");
			System.out.println(getB());
		}
	}

从上述代码可以看到,一个内部类方法可以访问自身的数据字段,也可以访问创建它的外围类对象的数据字段

内部类的对象总有一个隐式引用,指向创建它的外部类对象

只有内部类可以是私有的,而常规类可以有包可见性或公共可见性

内部类中声明的所有静态字段都必须是final,并初始化为一个编译时常量。如果这个字段不是一个常量就可能不唯一。

静态内部类

有时候,使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类有外围类对象的引用。为此,可以将内部类声明为static,这样就不会生成那个引用。

class Inner2 {
		public void innerPrint() {
			System.out.println(a);
			System.out.println(b);

			setA(20);
			System.out.println(getA());
			setB("world");
			System.out.println(getB());
		}
	}

	static class Inner {
		public void innerPrint() {
			Test01 t = new Test01();
			System.out.println(t.a);
			System.out.println(t.b);

			t.setA(20);
			System.out.println(t.getA());
			t.setB("world");
			System.out.println(t.getB());
		}

	}

静态内部类中只能访问外部类中被static修饰的内容

外部类想要访问内部类的东西,需要创建内部类的对象然后进行调用

创建内部类的对象:
        //静态的成员内部类创建对象:
        TestOuter.E e = new TestOuter.E();
        //非静态的成员内部类创建对象:
        TestOuter t = new TestOuter();
        TestOuter.D d = t.new D();
static关键字
  • static可以修饰:属性,方法,代码块,内部类。
  • static修饰属性
public class Test {
    //属性:
    int id;
    static int sid;
    public static void main(String[] args) {
        //创建一个Test类的具体的对象
        Test t1 = new Test();
        t1.id = 10;
        t1.sid = 10;

        //读取属性的值:
        System.out.println(t1.id);
        
        System.out.println(t1.sid);
    }
}

static修饰属性总结:
(1)在类加载的时候一起加载入方法区中的静态域中
(2)先于对象存在
(3)访问方式: 对象名.属性名 类名.属性名(推荐)

属性:
静态属性 (类变量)
非静态属性(实例变量)

  • static修饰方法;

static和public都是修饰符,并列的没有先后顺序,先写谁后写谁都行

在静态方法中不能访问非静态的方法,在静态方法中不能访问非静态的属性

在静态方法中不能使用this关键字

非静态的方法可以用对象名.方法名去调用

在同一个类中可直接调用

final关键字
  • 修饰变量

    final修饰一个变量,变量的值不可以改变,这个变量也变成了一个字符常量

    修饰引用数据类型,那么地址值就不可以改变,对象的属性依然可以改变

    被final修饰 ,指向不可以改变

  • 修饰方法

    final修饰方法,那么这个方法不可以被该类的子类重写

  • 修饰类

    final修饰类,代表没有子类,该类不可以被继承

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值