黑马程序员技术交流社区
标题:
内部类静态代码块
[打印本页]
作者:
帅哥哥
时间:
2014-5-23 09:14
标题:
内部类静态代码块
本帖最后由 帅哥哥 于 2014-5-23 13:42 编辑
为什么成员内部类和局部内部类不能有静态代码块,只有静态内部类才可以有?
各种内部类在其它类中建立对象的时候,是怎么初始化的,或者说是怎么进内存的?
作者:
Dark_Horse
时间:
2014-5-23 09:50
成员内部类 之所以叫做成员 就是说他是类实例的一部分,而不是类的一部分,而静态的是类的一部分和实例无关,不用类的对象实例就可调用。
第二个问题看下以下代码
package com.test.java;
public class ChengYuanNeiBuLeiTest {
/**
*
* 成员内部类等同于成员方法
* 成员内部类中不能有静态声明的的方法
* 成员内部类可以访问外部类的所有方法
* 局部内部类等同于局部变量,不能用访问控制权限控制
* 局部内部类不能有静态声明
* 局部内部类在访问局部变量的时候,局部变量必须使用final修饰
* 局部内部类的访问方法,因为他是局部内部类,就相当于局部变量,只有在大括号之内才有效
* 所以只能在大括号里面new一个新对象
* 局部内部类要访问局部变量必须声明为final类型
*/
//局部内部类
public void m3(){
final int i = 10;
class JuBuNeiBuLei{
public void m4(){
System.out.println(i+"局部内部类");
}
}
//要想访问m4方法 ,只要访问m3方法就可以访问m4方法
JuBuNeiBuLei jb = new JuBuNeiBuLei();
jb.m4();
}
//成员内部类等同于成员方法如下
class InnerClass{
public void m4(){
System.out.println(s1);
m1();
System.out.println(s2);
m2();
}
}
//静态变量
private static String s1="A";
//成员变量
private String s2="B";
//静态方法
private static void m1(){
System.out.println("静态方法执行");
}
private static void m2(){
System.out.println("第二个成员方法执行");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建外部类对象
/**
* 访问成员内部类的方法:
* 先创建外部类然后用外部类的引用去创建内部类如下格式
*/
ChengYuanNeiBuLeiTest cy = new ChengYuanNeiBuLeiTest();
InnerClass in = cy.new InnerClass();
in.m4();
//访问局部内部类
ChengYuanNeiBuLeiTest cy1 = new ChengYuanNeiBuLeiTest();
cy1.m3();
}
}
复制代码
作者:
帅哥哥
时间:
2014-5-23 13:42
Dark_Horse 发表于 2014-5-23 09:50
成员内部类 之所以叫做成员 就是说他是类实例的一部分,而不是类的一部分,而静态的是类的一部分和实例无关 ...
哦,想明白了,静态代码块也是类的成员,要受到成员受的限制的,
内部类其实放在成员位置上或是局部,就要受到相应的限制,但还有类的特性,对吧~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2