Java中的面向对象(内部类、集合类)

内部类(这里有一篇文章,条理清晰,脉络明确,进行了参考http://www.cnblogs.com/dolphin0520/p/3811445.html)

What

顾名思义,把一个类定义在另一个类里面,或者把一个类定义在一个方法里面,就是内部类啦!

茴有四种写法,内部类根据定义的位置不同也有四种

1.成员内部类(前面放什么access modifier都可以随便)

位置:定义在一个类的内部(就像一个成员一样)

访问权限(方法):内部类和外部类有同名的方法或者变量的时候,默认情况下会访问内部类的成员。这个时候要访问外部类成员需要这样:外部类.this.成员变量。 外部类.this.成员方法。内部类可以无条件访问外部类的成员(我在你体内,就可以控制你)。外部类想访问内部类的成员,必须要先创建内部类的对象,再进行访问。还有,内部类是依附外部类存在的,如果没有外部类的对象,是无法创建或者访问内部类的对象方法。

2.局部内部类

位置:定义在一个方法内部,或者一个作用域内部的类。

访问权限(方法):仅限于他所在的方法内或者作用域内

他就像一个方法里面的局部变量(方法中的局部变量也不能用public, protected, private以及static修饰,final可以)不能用前面提到的修饰符修饰。

3.匿名内部类

位置:在某个方法的()中,直接new并且带上实现(有点像JavaScript,而且还记得comparator的实现吗?那个就是匿名内部类!)

访问权限(方法):

匿名内部类是唯一一种没有构造器的类!!因为没有构造器所以匿名内部类的使用范围十分有限,大部分匿名内部类用于接口回调。

4.静态内部类

位置:也是定义在另一个类里面的类,不过他前面加上了关键字static。他不依赖于外部类,而且他不能使用外部类的static成员变量或者方法。这点怎么理解?为什么?因为没有外部类对象的情况下,可以创建静态内部类的对象,如果允许方位外部类的non static成员就会产生矛盾。

访问权限(方法):

JAVA编译器在编译的时候,会将成员内部类单独编译成一个字节码文件。

补充:这里既然提到了静态内部类,就要讲一下static关键字修饰的方法变量。

在《Java编程思想》P86页有这样一段话:
  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
  这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:

  方便在没有创建对象的情况下来进行调用(方法/变量)。

Static 方法:

静态方法中不能访问non static成员方法和non static成员变量。但是在非静态成员方法中是可以访问静态成员方法/变量的。

Static变量:静态变量被所有的对象共享。这么说其实并不是很清晰。我们理解起来要记住,在内存中只有一个副本,他当且仅当在类初次加载的时候会被初始化。而非静态变量会存在多个副本,各个对象的副本互不影响。

Static代码块:

有点像JavaScript代码块,就是按照顺序执行的,只要见到了static修饰的代码块,就按照顺序直接跑。而且只会跑一次,所以如果一个类会实例化很多次,创建很多对象,但是却只需要有一段执行一次的代码,就可以static。这里注意,执行顺序是:先父类,再子类,先static,再构造函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值