2022.0512学习Java笔记之代码块、内部类

代码块

代码块分为普通代码块、构造块、静态块、同步块。

普通代码块:即一个简单的{}

构造块:构造块写在类之中,并且优先于构造方法执行,而且每当有对象实例化产生时都要执行构造块,会进行重复调用,但一般尽量不去使用。

静态块:静态块是使用static关键字声明的代码块,使用时分两种情况 一种是定义在普通类之中,另一种是在主类之中。并且优先于构造块执行,不管有多少个实例化对象,静态块只执一次

内部类

一.内部类的基本概念

所谓内部类就是在一个类的内部定义了类的结构形成的代码形式 如下代码:

class Outer { //外部类
	private String msg = "Hello World!";
	class Inter{ //内部类
		public void print(){
			System.out.println(Outer.this.msg);
		}
	}
	public void fun(){
		new Inter().print();
	}
}
public class TextDemo10{
	public static void main(String[] args) {
		Outer out = new Outer();
		out.fun();
	}
}

内部类的缺点:类的结构应该是属性和方法两个部分,但是多了一个类,这样内部类就破坏了程序

优点:可以方便访问外部类之中定义的私有成员,同理 外部类可以方便的访问内部类的私有成员

其中内部类调用外部类时使用“外部类名.this.属性”

外部类访问内部类私有成员实例

class Outer { //外部类
	private String msg = "Hello World!";
	class Inter{ //内部类
		private int num = 100;//内部类私有成员
		public void print(){
			System.out.println(Outer.this.msg);
		}
	}
	public void fun(){
		Inter in = new Inter();
		in.print();
		System.out.println(in.num);//内部类私有
	}
}
public class TextDemo10{
	public static void main(String[] args) {
		Outer out = new Outer();
		out.fun();
	}
}

以上代码中内部类最终都在外部类的方法中操作,那么Java中内部类也可以直接由主方法调用语法为:“外部类.内部类  内部类对象 = new 外部类().new 内部类();”        例

class Outer { //外部类
	private String msg = "Hello World!";
	class Inter{ //内部类
		public void print(){
			System.out.println(Outer.this.msg);
		}
	}
}
public class TextDemo10{
	public static void main(String[] args) {
		Outer.Inter in = new Outer().new Inter();
		in.print();
	}
}

如果一个内部类不想在外使用,那么就可以使用关键字private声明

二.使用static定义内部类

如果说现在一个内部类不希望受到外部类中属性的控制,而可以去直接实例化对象,那么在定义内部类的时候可以使用关键字static声明,此时的内部类严格上就是一个外部类了,只能够调用所在外部类的static属性,此时在定义内部类对象的时候,格式也发生变化,“外部类.内部类  内部类对象 = new 外部类.内部类();” 例

class Outer { //外部类
	private static String msg = "Hello World!";
	static class Inter{ //内部类
		public void print(){
			System.out.println(msg);
		}
	}
}
public class TextDemo10{
	public static void main(String[] args) {
		Outer.Inter in = new Outer.Inter();
		in.print();
	}
}

三.在方法中定义内部类

理论上,内部类可以在任何位置上定义,这就包括了类中、代码块中、方法中。

方法中的内部类如果想要访问方法的参数或者是方法定义的变量,则参数或者变量前应该加上关键字final(此处只是一个标记并非作用)。例如

class Outer { //外部类
	private static String msg = "Hello World!";
	public void fun(final int num){
		class Inter{ //方法里面定义内部类
			public void print(){
				System.out.println(Outer.this.msg);
				System.out.println(num);
			}
		}
		new Inter().print();
	}
}
public class TextDemo10{
	public static void main(String[] args) {
		new Outer().fun(100);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值