前言
学习Java过程中,对内部类和代码块部分知识比较模糊,容易忘掉。今天再学的时候有一些其他的收获,整理记录一下。
1. 代码块
代码块的作用可以为初始化变量。都在在构造器方法之前执行,分为静态代码块和匿名代码块。静态代码块是在类加载时执行,因此只执行一次。匿名代码块在new实例化时执行,每个new新实例都会执行。
public class User{
public static int age;
{
age=2;
dosomething(); //匿名代码块
}
static{
age=1;
dosomething(); //静态代码块
}
public User(){
age=3;
dosomething(); //构造器
}
public static void dosomething(){
System.out.println(age);
}
}
public static void main(String[] args) {
new User();
System.out.println("============");
new User();
}
实验结果
可知
- 执行顺序: 静态代码块-> 匿名代码块-> 构造器。
- 静态代码块只执行一次。
内部类
内部类分为四种,成员内部类、静态内部类、局部内部类、匿名内部类。 因为内部类可以单独继承,这使得多继承方案得以完整。
成员内部类(同方法同一级别)
- 可以访问外部类。
- 访问同名外部类时 外部类名.this.变量名
- 实例化内部类之前需要先实例化外部类,new Outer().new Inner()
- 注意
- 可以使用权限修饰符(public...)
public class Outer {
private int ak =1;
public class inner{
private int ak =2;
public void doSomething() {
System.out.println(Outer.this.ak);
System.out.println(ak);
}
}
}
public static void main(String[] args) {
Outer out = new Outer();
out.new inner().doSomething();
}
静态内部类
- 在成员内部类加static,效果是无法访问内部类的非静态方法,因为静态内部类加载在实例化之前。
成员内部类(在方法中)
- 可以访问方法的局部变量
- 不可以使用修饰符(no public...、static)
- 可以访问外部类
- 调用内部类的方法需要在 内部类之外,方法之外 实例化+调用
public class Outer {
String name ="外部类";
public void method() {
class Inner{
String name="内部类";
public void print(){
System.out.println(name);
System.out.println(Outer.this.name);
}
} //局部内部类之外,方法之内
Inner in = new Inner();
in.print();
}
}
public static void main(String[] args) {
Outer out = new Outer();
out.method();
}
匿名内部类(方法内)
- 一般用于隐含的实现接口
- 调用内部类的方法,一般“自产自销”。内部类的}后面直接调用内部类的方法。注意;号
public class Outer {
public void method() {
new UserService(){
@Override
public void run() {
System.out.println("匿名内部类");
}
}.run(); //自产自销
}
}
public class Application {
public static void main(String[] args) {
Outer outer = new Outer();
outer.method();
}
}
标签:Java,内部,代码,void,Outer,new,public,out
From: https://www.cnblogs.com/its1440/p/17517699.html