Java类的组成
public class Demo03 {
public static void main(String[] args) {
//类的组成:属性、方法、构造器、代码块(静态块、构造块、普通块、同步块)、内部类(静态内部类、非静态内部类)
}
static {
System.out.println("静态块");
}
{
System.out.println("构造块");
}
public void add() {
{
System.out.println("普通块");
}
}
}
内部类
//内部类:成员内部类、
class OutClass {
String s = "外部类";
//成员内部类(定义在类中方法外) 局部内部类(定义在方法中)
class InnerClass1 {
String s="内部类";
public void echo1() {
System.out.println("成员内部类");
//内部类访问外部类重名属性或方法
String s = OutClass.this.s;
System.out.println(s);
}
}
//静态成员内部类
static class InnerClass2 {
public void echo2() {
System.out.println("静态成员内部类");
//静态成员内部类不能直接访问外部类的属性或方法
OutClass o = new OutClass();
}
}
//局部内部类
public void echo3() {
class InnerClass3 {
public void echo() {
//内部类不能声明静态方法
System.out.println("局部内部类");
}
}
}
public void method() {
//外部类访问内部类需要创建内部类的实例
InnerClass2 c2 = new InnerClass2();
c2.echo2();
InnerClass1 c1 = new InnerClass1();
c1.echo1();
}
public static void main(String[] args) {
OutClass o=new OutClass();
o.method();
}
}
成员内部类的实例化
class Test{
public static void main(String[] args) {
//成员内部类的实例化
//1.静态内部类
OutClass.InnerClass2 c2=new OutClass.InnerClass2();
//2.非静态成员内部类
// OutClass.InnerClass1 c1=new OutClass.InnerClass1();实例化失败
OutClass o=new OutClass();
OutClass.InnerClass1 c1=o.new InnerClass1();
}
}
局部内部类与匿名对象
public class Demo04 {
int length=10;
public void method1(){
int length=10;
class InnerClass implements SimpleSelector {
public int getLength(){
// length=12;修改变量失败
// return length; 局部内部类不能修改局部变量,该变量默认被final修饰
return 0;
}
@Override
public short getSelectorType() {
return 0;
}
public SimpleSelector share(){
//返回匿名对象
return new SimpleSelector() {
@Override
public short getSelectorType() {
return 0;
}
};
}
public SimpleSelector getNewOjb(){
SimpleSelector s=new SimpleSelector() {
@Override
public short getSelectorType() {
return 0;
}
};
return s;
}
}
}
}



