- 浏览: 145189 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (185)
- Mule (2)
- linux (9)
- JavaScript相关总结 (2)
- 标准C++ (2)
- 数据库 (3)
- 数据结构 (2)
- Java (9)
- Oracle (8)
- 设计模式 (6)
- struts (1)
- Spring (2)
- Spring Security (1)
- Axis2 web service (3)
- IBM WebSphere应用服务器 (0)
- webservice (10)
- CXF (6)
- Ant (2)
- WebLogic Server (2)
- play (3)
- tomcat (5)
- Jsp (0)
- memcached (4)
- android (9)
- mongodb (0)
- jongo (0)
- scala (1)
- 软件安装 (1)
- flex (The View Layer) (0)
- mysql (1)
- ios (11)
- PhoneGap/Cordova (1)
- 线程 (1)
- ivy (1)
- xml (1)
- hadoop 0.20 (1)
- Hibernate (0)
- maven (0)
- Ajax (0)
- swift (0)
- objective-c开发ios (0)
- objective-c (11)
- nio (0)
- io (1)
- 操作系统 (1)
- ActiveMQ (0)
- apache (1)
- HBase (0)
- redis (1)
- python (6)
- SOA (0)
- nginx (3)
- angularJS (3)
- Node.js (5)
- JavaScript (3)
- PHP (5)
- 网络 (1)
- servlet jsp (1)
- jQuery (1)
- shell (4)
- CSS (0)
- spark (0)
- dwr (7)
- Couchbase (2)
- Sencha Architect (0)
- jQuery Mobile (0)
- jUnit (0)
- jetty (0)
- activiti (1)
- Git (1)
- Groovy (1)
- Gradle (4)
- MyBatis (0)
- Spring微服务 (1)
- Cocoa (0)
- Ext JS 4 (1)
- Varnish Cache (0)
- Django (1)
- Spring Boot (2)
- WordPress (0)
- ruby (0)
- react native (1)
- SpringBoot (1)
- eclipse (1)
- extjs 5 (1)
- 云计算 (0)
- kafka (0)
- GitHub (1)
- zookeeper (0)
- storm (0)
- Docker (0)
- Spring Cloud (2)
- 谷歌地图API (0)
- Jetty 9 (0)
- Spring 5响应式编程 (0)
- 字符集和校对规则 (0)
最新评论
-
小小西芹菜:
前段时间研究了一下goeasy,java后台推送只需要两行代码 ...
Reverse AJAX -
spp_1987:
现在服务都能启动, 就是怎么用java生成wsdl 不成。。。 ...
Apache Axis2 安装指南 -
spp_1987:
ai...
Apache Axis2 安装指南 -
zsjg13:
不好意思,我看了下我上面的描述,我发现我把insert语句中的 ...
ORA-02287: sequence number not allowed here问题的解决 -
StartNowFly:
没解决,还是报一样的错
ORA-02287: sequence number not allowed here问题的解决
内部类总结:
1、内部类允许在一个类中定义另一个类。它们为类提供一种范围,因为可以使一个类成为另一个类的成员。
2、“顶级嵌套类”—— 一种标识为static的内部类,从技术上来说并不是真正的内部类。因为静态嵌套类
仍然是一个类。
3、事件处理程序可能是这种情况的一个最好的例子,事实上,这也是把内部类添加到该语言的主要原因之一。
4、内部类实例可以访问外部类的所有成员,甚至是private成员(因为内部类也是外部类的一个成员)。
5、class MyOuter {
class MyInner {
}
}
如果编译它:javac MyOuter.java 将产生两个类文件:MyOuter.class、MyOuter$MyInner.class
用普通方式不能访问这个内部类文件,例如java MyOuter$MyInner希望运行这个内部类的main方法。
常规内部类不能有任何类型的静态声明。能够访问内部类的唯一方法是通过外部类的一个实例。
6、要实例化内部类实例,必须要有一个与它相关的外部类实例,它指不能从外部类的static方法或
者从任何其他类的任何其他代码实例化内部类。
(1)在外部类代码中实例化内部类
class MyOuter {
private int x = 7;
public void makeInner() {
MyInner in = new MyInner();
in.seeOuter();
}
class MyInner {
public void seeOuter() {
System.out.println("Outer x is " + x);
}
}
}
(2)在外部类代码外实例化内部类
从外部类的外部非静态代码中的任何地方建立实例的代码都很简单:
public static void main(String[] args) {
MyOuter mo = new MyOuter();
MyOuter.MyInner inner = mo.new MyInner();
inner.seeOuter();
}
无论main方法是位于MyOuter类中还是某个其他类中(假若其他类可以访问MyOuter),前面代码都是相同的。
如果合为一行,则是:MyOuter.MyInner inner = new MyOuter().new MyInner();
7、在内部类代码内,this引用该内部类的实例。但如何在内部类中访问它的外部类实例呢?
尽管通常情况下内部类代码不需要引用外部类,因为它已经有一个隐含引用,但是如果真的要呢?
class MyOuter {
private int x = 7;
public void makeInner() {
MyInner in = new MyInner();
in.seeOuter();
}
class MyInner {
public void seeOuter() {
System.out.println("Outer x is " + x);
System.out.println("Inner class ref is " + this);
System.out.println("Outer class ref is " + MyOuter.this);
}
}
public static void main(String[] args) {
MyOuter.MyInner inner = new MyOuter().new MyInner();
inner.seeOuter();
}
}
8、应用于内部类的成员修饰符
final、abstract、public、private、protected、static、strictfp。
9、方法本地内部类:
class MyOuter2 {
private String x = "Outer2";
void doStuff() {
class MyInner {
public void seeOuter() {
System.out.println("Outer x is " + x);
}
}
MyInner in = new MyInner();
in.seeOuter();
}
}
(1)方法本地内部类只能在定义该内部类的方法内实例化。
(2)内部类对象不能使用该内部类所在方法的局部变量(不过如果局部变量是final的,则也可以),那为什么呢?
因为不能保证局部变量的存活期与本地内部类对象一样长。
(3)唯一能够应用于本地内部类的修饰符是abstract和final。
(4)在一个静态方法内声明的内部类只能访问该封装类的静态成员。
10、匿名内部类:
(1)可以在方法内、方法的参数内定义。
class Popcorn {
public void pop() {
System.out.println("popcorn");
}
}
class Food {
// 声明Popcorn类型的实例变量p后,声明一个新类,它没有名字,它是Popcorn的子类
Popcorn p = new Popcorn() {
// 建立匿名内部类的关键点:重写父类的一个或多个方法(或设计一个接口的方法)
public void pop() {
System.out.println("anonymous popcorn");
}
}
}
这里要记住的关键一点是Popcorn引用变量不是引用Popcorn实例,而是Popcorn匿名子类的实例。
(2)当涉及到匿名内部类时,多态性在起作用。其含义是什么?
引用变量类型(父类)将不知道关于新方法(定义在匿名子类)的任何内容,因此,如果在匿名
内部类引用上调用父类定义中没有的任何方法,编译出错。
class Horse extends Animal {
void buck() {
}
}
class Animal {
void eat() {
}
}
class Test {
public static void main(String[] args) {
Animal h = new Horse();
h.eat(); // 正确
h.buck(); // 错了
}
}
(3)只能设计一个接口。事实上,一个匿名内部类甚至不能同时扩展一个类和设计一个接口。
11、静态嵌套类也称顶级嵌套类,或静态内部类。但是按照内部类的标准定义,它们根本就不是内部类。
class BigOuter {
static class Nested {
}
}
该类自己并不真正是“静态的”,没有静态类这样的内容。在这种情况下,static修饰符只是说这个嵌套类是
外部类的静态成员。
(1)静态嵌套类不能访问外部类的实例变量和方法。一定要注意静态嵌套类中的代码像非静态(常规)内部类
一样操作。
(2)实例化静态嵌套类:
class BigOuter {
static class Nested {
}
}
class Broom {
public static void main(String[] args) {
BigOuter.Nested n = new BigOuter.Nested();
}
}
发表评论
-
Tuning the JVM
2015-12-05 00:23 0There are two HotSpot JVMs , d ... -
Aggregation和Composition
2015-05-14 14:15 540下面的话摘自Java Persistence with Hi ... -
Sizing Permgen and Metaspace
2015-01-14 16:20 1474当JVM加载classes时,它必须跟踪关于这些classe ... -
内存溢出错误
2015-01-14 15:26 920JVM在这些情形下会抛出 ... -
UTF-16
2014-09-22 23:49 0UTF-16 Unicode将字符映射到的integ ... -
Unicode字符集
2014-09-22 23:26 407Unicode字符集 Unicode字符集将char ... -
Hiding Members
2014-05-20 00:17 07.3 Hiding Members 字段Hidin ... -
switch语句要注意的问题
2010-12-20 22:28 1126关于switch语句要注意的几点 1、switch() ... -
java.lang.OutOfMemoryError: Java heap space 的解决
2010-03-21 15:53 867解释:Heap size 设置JVM堆的设置是指java程序运 ... -
移位运算符总结
2010-03-19 14:32 931移位运算符(注意:只能被用于整数数字上,而不能是浮点数) & ... -
关于 CATALINA_HOME 和 TOMCAT_HOME 环境变量
2010-02-02 10:48 4186Tomcat的servlet容器在4.X 版本中被Crai ...
相关推荐
Java 中的匿名内部类总结 Java 中的匿名内部类是一种特殊的内部类,它没有名字,因此也称为匿名类。匿名内部类是一种简洁的编程方式,能够简化代码编写,但它也有一些限制和特点。 匿名内部类的定义 匿名内部类是...
### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...
Java 内部类总结 Java 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而外部类只能使用 public 和缺省的包...
### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高代码的组织性,还能帮助我们更好地处理类与类之间的关系。根据...
Java 内部类总结 Java 内部类是 Java 语言的一个重要概念,指的是在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而...
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现...
Java内部类总结 Java内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限...
170331-01.匿名内部类总结.java 170331-01.匿名内部类总结.java 匿名 内部类 总结 java
Java 中的内部类是面向对象编程的一个重要特性,它允许在一个类的定义内部定义另一个类。内部类的主要优点是能够方便地访问外部类的私有成员,提供了更封装的代码组织方式,以及创建特定上下文的类实例。下面将详细...
总结一下,Java内部类是一种强大的工具,它增强了类的封装性和灵活性。通过内部类,开发者可以更好地组织代码,实现更复杂的逻辑,同时保持良好的代码结构。成员内部类提供了对外部类状态的访问,局部内部类提供局部...
《Java语言——内部类详解》 内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以提供更复杂的封装,使得代码结构更加清晰,同时还能访问外部类的私有成员,提供了更高级别...
Java中的内部类是一种强大的特性,它允许在一个类的定义内部定义另一个类。内部类可以作为外部类的一个成员,提供了一种灵活的代码组织方式,并且能够访问外部类的私有成员,这使得内部类在处理封装和继承时具有独特...
Java内部类是Java语言的一个独特特性,它允许一个类被定义在另一个类的内部。这种设计使得代码结构更加紧凑,同时也提供了对封装和抽象的新层次。内部类在J2EE编程中可能用得较少,但在GUI编程中尤其常见,主要用于...