java 内部类、static关键字、final关键字

1. 内部类

1.1如何定义内部类

内部类可以直接访问包裹着它的外部类任何属性和方法(包括私有的)。
一般而言,定义内部类,注意的目的,肯定是在包裹着它的外部类中使用它。

在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。

成员内部类:
成员内部类是可以无限制的访问外围类的所有成员属性和方法,包括private,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。

注意:

  • 成员内部类中不能存在任何static的变量和方法。
  • 成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。

举例:

public class cowboybebop {
	private String name;
	
	static void love() {
		System.out.println("至死不渝");
	}
	
	public void cowboybebop(){ //构造方法
		faye faye = new faye();//调用内部faye类
		faye.fayelove();
		System.out.println("1");
		spike spike = new spike();//调用内部spike类
		spike.spikelove();
		System.out.println("2");
	}
	
	class faye {//构造内部faye类
		void fayelove() {
			name = "Faye";
			System.out.print(name +"|");
			love();
		}
	}
	
	class spike	{//构造内部spike类
		void spikelove() {
			name = "spike";
			System.out.print(name +"|");
			love();
		}
	}
	
	public static void main(String[] args) {
		love();
		cowboybebop.faye faye = new cowboybebop(). new faye();//调用外部类
		faye.fayelove();
		cowboybebop cowboy = new cowboybebop();
		cowboy.cowboybebop();
		cowboybebop.spike spike = new cowboybebop().new spike();//调用外部类
		spike.spikelove();
		
	}
}

运行结果:

至死不渝
Faye|至死不渝
Faye|至死不渝
1
spike|至死不渝
2
spike|至死不渝

局部内部类:

局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内,出了该方法和作用域就会失效。
注意:注意,局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

举例:

public class jubuneibulei {
	
	public in faye() {
		// 返回 in 类型的方法
		class faye1 extends in{
		//内部类(访问限于方法内,所以使用了继承)
			void love(){
				String hobby = "赌博";
				System.out.println("faye的爱好:"+ hobby);
			} 
		}
		return new faye1();
		//返回in类型
	}
	public static void main(String[] args) {
		jubuneibulei j = new jubuneibulei();
		in q = j.faye();
		q.love();
	}
}

class in{
	void love() {
	}
}

匿名内部类:

  • 匿名内部类是内部类的简写格式。
  • 匿名内部类的前提:内部类必须继承一个类或者实现接口。
  • 匿名内部类不能创建构造函数。
  • 匿名内部类在创建对象的时候,只能使用唯一一次。

匿名内部类的定义格式:
接口名称 对象名 = new 接口名称() {
// 覆盖重写所有抽象方法
};

举例:

public class nimingneibulei {
	void say() {
		
	}
	
	public static void main(String[] args) {
		cowboy cow = new cowboy();
		cow.s.say();
	}
}

class cowboy {
	nimingneibulei s = new nimingneibulei() {
		void say() {
			System.out.println("cowboy bebop yyds");
		}
	};
}

运行结果:

cowboy bebop yyds

静态内部类:

静态内部类也是定义在另一个类里面的类。静态内部类是不需要依赖于外部类的,并且它不能使用外部类的非static成员变量或者方法,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。

注意点:

  • 它的创建是不需要依赖于外围类。
  • 它不能使用任何外围类的非static成员变量和方法。

举例:

在这里插入代码片

2. static关键字

  • static是一个修饰符,用于修饰成员
  • static修饰的成员被所有的对象所共享
  • static优先于对象存在,因为static的成员随着类的加载就已经存在了
  • static修饰的成员多了一种调用方式,即可以直接被类名调用。类名.静态变量
  • static修饰的数据是共享数据,对象中的存储的是特有数据

3.final关键字

final关键字代表最终的、不可改变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值