- 浏览: 198141 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (140)
- 笑话 (2)
- Java (29)
- Php (8)
- Javascript (6)
- Jquery (3)
- html + css (5)
- 网站推荐 (0)
- Android (15)
- sqlite (1)
- 精品文章 (6)
- bq (0)
- struts2 (7)
- ibatis (4)
- linux (1)
- oracle (9)
- jsf (5)
- eclipse (2)
- mysql (0)
- hiberante (2)
- spring (7)
- exception (1)
- eclipse js插件 (1)
- 工作流 (0)
- 理财 (1)
- ext (1)
- ssl (6)
- https (5)
- 信息安全 (3)
- 设计模式 (0)
- 基本概念 (1)
- freemarker (1)
- ligerUI (1)
- html5 (1)
- 会计 (1)
- iReport (2)
- 会计知识 (0)
- car (1)
- maven (1)
- PowerDesigner (1)
最新评论
-
zcz123:
路过,帮踩踩!
SyntaxHighlighter使用方法[转] -
comesmiletoface:
原来一直在使用HWPF哎
Apache POI介绍 -
rjkfABC:
什么神仙,我看就是男人写出来的!
一个女程序员的征婚信息: -
zcz123:
在csdn上看过,不过这样女人估计是神仙
一个女程序员的征婚信息:
可以将一个类的定义放在另一个类的定义内部,这就是内部类
创建内部类对象,必须在外部类中写个方法:OuterClassName.InnerClassName = getInner(); 或者 外部对象.new 内部类
在拥有外部类对象这前是不可能创建内部类对象。除非是嵌套类(静态内部类)。
内部类自动拥有对其外部类所有成员的访问权。
内部类若是要生成外部类对象,就用外部类的名字后面跟.this
===================================================
匿名内部类——通常是new 一个接口,并实现这个接口的方法,而没有对象名及类名。往往用在一个方法中。而这个匿名内部类想调用外部方法的参数,这个参数要设为final,否则编译会出错。
interface People{
void add();
}
public class ClassN {
public People getPeople(final int a, final int b){
return new People(){
@Override
public void add() {
System.out.println(a + " + " + b + " = " + (a+b));
}
};
}
public static void main(String[] args) {
ClassN n = new ClassN();
People p = n.getPeople(2, 4);
p.add();
}
}
=================================
1、内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。
几种内部类的共性:
A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
B、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。
2、成员内部类:形式如下
class Outer {
class Inner{}
}
编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。
3、方法内部类。
顾名思义,把类放在方法内。
class Outer {
public void doSomething(){
class Inner{
public void seeOuter(){
}
}
}
}
A、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
B、方法内部类对象不能使用该内部类所在方法的非final局部变量。
因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
下面是完整的例子:
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
4、匿名内部类。
顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。
A、继承式的匿名内部类。
class Car {
public void drive(){
System.out.println("Driving a car!");
}
}
class Test{
public static void main(String[] args) {
Car car = new Car(){
public void drive(){
System.out.println("Driving another car!");
}
};
car.drive();
}
}
结果输出了:Driving another car! Car引用变量不是引用Car对象,而是Car匿名子类的对象。
B、接口式的匿名内部类。
interface Vehicle {
public void drive();
}
class Test{
public static void main(String[] args) {
Vehicle v = new Vehicle(){
public void drive(){
System.out.println("Driving a car!");
}
};
v.drive();
}
}
上面的代码很怪,好像是在实例化一个接口。事实并非如此,接口式的匿名内部类是实现了一个接口的匿名类。而且只能实现一个接口。
C、参数式的匿名内部类。
class Bar{
void doStuff(Foo f){}
}
interface Foo{
void foo();
}
class Test{
static void go(){
Bar b = new Bar();
b.doStuff(new Foo(){
public void foo(){
System.out.println("foofy");
}
});
}
}
5、静态嵌套类。
从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。
详细内容请见:http://hi.baidu.com/honglin_bd/blog/item/fa60c4d3866f972933fa1c87.html
创建内部类对象,必须在外部类中写个方法:OuterClassName.InnerClassName = getInner(); 或者 外部对象.new 内部类
在拥有外部类对象这前是不可能创建内部类对象。除非是嵌套类(静态内部类)。
public class Outer { Inner getInner(){ return new Inner(); } class Inner{ public Inner(){ System.out.println("Inner init"); } } public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner2 = outer.getInner(); Outer.Inner inner = outer.new Inner(); } }
内部类自动拥有对其外部类所有成员的访问权。
内部类若是要生成外部类对象,就用外部类的名字后面跟.this
===================================================
匿名内部类——通常是new 一个接口,并实现这个接口的方法,而没有对象名及类名。往往用在一个方法中。而这个匿名内部类想调用外部方法的参数,这个参数要设为final,否则编译会出错。
interface People{
void add();
}
public class ClassN {
public People getPeople(final int a, final int b){
return new People(){
@Override
public void add() {
System.out.println(a + " + " + b + " = " + (a+b));
}
};
}
public static void main(String[] args) {
ClassN n = new ClassN();
People p = n.getPeople(2, 4);
p.add();
}
}
=================================
1、内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。
几种内部类的共性:
A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
B、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。
2、成员内部类:形式如下
class Outer {
class Inner{}
}
编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。
3、方法内部类。
顾名思义,把类放在方法内。
class Outer {
public void doSomething(){
class Inner{
public void seeOuter(){
}
}
}
}
A、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
B、方法内部类对象不能使用该内部类所在方法的非final局部变量。
因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
下面是完整的例子:
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
4、匿名内部类。
顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。
A、继承式的匿名内部类。
class Car {
public void drive(){
System.out.println("Driving a car!");
}
}
class Test{
public static void main(String[] args) {
Car car = new Car(){
public void drive(){
System.out.println("Driving another car!");
}
};
car.drive();
}
}
结果输出了:Driving another car! Car引用变量不是引用Car对象,而是Car匿名子类的对象。
B、接口式的匿名内部类。
interface Vehicle {
public void drive();
}
class Test{
public static void main(String[] args) {
Vehicle v = new Vehicle(){
public void drive(){
System.out.println("Driving a car!");
}
};
v.drive();
}
}
上面的代码很怪,好像是在实例化一个接口。事实并非如此,接口式的匿名内部类是实现了一个接口的匿名类。而且只能实现一个接口。
C、参数式的匿名内部类。
class Bar{
void doStuff(Foo f){}
}
interface Foo{
void foo();
}
class Test{
static void go(){
Bar b = new Bar();
b.doStuff(new Foo(){
public void foo(){
System.out.println("foofy");
}
});
}
}
5、静态嵌套类。
从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。
详细内容请见:http://hi.baidu.com/honglin_bd/blog/item/fa60c4d3866f972933fa1c87.html
发表评论
-
iReport用javabean创建数据源
2015-11-17 09:53 650iReport用javabean创建数据源http://blo ... -
JeeSite(JES)
2015-06-25 13:58 922eeSite-OSite(JES)为自主开发的、完全开源的、基 ... -
split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
2015-04-11 12:04 1037split 分割 字符串(分隔符如:* ^ : | , .) ... -
启动tomcat时报端口占用如何迅速定位占用的程序?
2014-10-01 20:40 654启动tomcat时报端口占用如何迅速定位占用的程序? 1. ... -
MapUtil
2014-08-12 00:27 964package com.common.util.collect ... -
(转载)页面静态化(JSP动态页面转静态化)
2013-10-19 11:36 1276本文来自:http://springki ... -
JNDI tomcat
2013-10-16 10:44 895JNDI数据源简易配置: /WebRoot/MET ... -
单点登录2:WEB-SSO的实现
2013-08-26 11:26 819为什么说WEB-SSO比较容易实现呢?这是有WEB应用自身 ... -
单点登录
2013-08-26 10:34 926单点登录(Single Sign On ... -
List, map,iterator
2013-07-15 15:11 771无论你遍历ArrayList还是LinkedList都可以尽 ... -
excel 空格变成?
2013-05-09 18:50 1592这个好像是隐藏字符,通过输入输出流就会显示成“?”。 ... -
Java定时器在Web中的应用
2013-04-25 20:06 908==========Java定时器在Web中的应用===== ... -
单例模式Singleton
2013-04-19 10:57 789Singleton 是一种创建性模型,它用来确保只产生一个实 ... -
hibernateTemplate的findByNamedQuery
2012-12-13 11:46 1107hibernateTemplate的findByNamedQ ... -
PO用于持久层数据库, VO用于业务层
2012-12-06 17:06 964PO:persistant object 持久对象,可以看成是 ... -
mysql乱码
2012-11-28 11:36 921框架中插入数据到mysql出现乱码 列出能找的解决办法: ... -
JDK的工具程序native2ascii
2012-11-20 15:49 915JDK的工具程序native2ascii来转换,例如: na ... -
eclipse导出部署包war
2012-11-19 15:56 1331选择项目-->export->web->WA ... -
dbf文件
2012-08-07 13:19 0一种特殊的文件格式!表示数据库文件,Foxbase,Dbase ... -
HttpClient
2012-01-29 16:36 922网页抓取可以使用Apache的HttpClient,网页分析可 ...
相关推荐
在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法、匿名内部类不能是public、protected、private、static、只能创建匿名内部类的一个实例、匿名内部类不能定义任何静态成员、静态方法、一个匿名...
内部类是Java编程语言中的一种特性,它允许我们在一个类的内部定义另一个类。这种设计模式在Android开发中尤其常见,因为它可以有效地管理代码和实现特定的功能。本文将详细探讨内部类、匿名内部类以及内部接口的...
在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...
内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及方法参数内部类。 1. **成员内部类**:成员内部类就像是外部类的一个普通成员,可以是静态或非静态的。非静态内部类拥有对外部类的引用,可以直接...
Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...
内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。 成员内部类 成员内部类是定义在外部类的成员变量中的一种内部类。它可以访问外部类的所有成员变量和方法,包括私有的变量和方法。成员内部...
本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...
Java 基础第七章内部类与异常类 Java 语言支持在一个类中定义另一个类,这样的类称做内部类。内部类和外嵌类之间存在着紧密的关系:内部类可以访问外嵌类的成员变量和方法,而外嵌类也可以使用内部类声明的对象作为...
### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...
然而,不当使用Handler,尤其是结合匿名内部类或非静态内部类,可能导致内存泄漏和Native内存增加,这对应用性能和稳定性造成负面影响。 首先,我们要理解内存泄漏的概念。内存泄漏是指程序中已分配的内存没有被...
根据不同的应用场景和特性,内部类可以分为多种类型:成员内部类、局部内部类、静态内部类、匿名内部类。下面将详细介绍每种类型的内部类及其特点和使用方法。 #### 成员内部类 成员内部类(也称为非静态内部类)...
### 反射私有内部类的例子 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的功能,允许程序在运行时检查和修改自身结构与行为。通过反射,可以动态地获取类的信息并操作其字段、方法以及构造器等。...
Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
首先,内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像其他成员变量一样,可以直接访问外部类的所有成员,包括私有成员。局部内部类只存在于某个方法内,它的作用范围更小,...
内部类主要分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 1. 静态内部类(Static Inner Class) 静态内部类与普通的类类似,只是它们定义在外部类中,并且前面带有 `static` 关键字。它们不会...
Java 嵌套类和内部类详解 Java 中的嵌套类和内部类是指在一个类的内部定义另一个类,这种类称为嵌套类(nested classes)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,非静态嵌套类也即被称...
Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态嵌套类)、局部内部类和匿名内部类。 - **成员内部类**:这种类型的内部类是定义在外部类的一个成员位置上,它可以访问外部类...
内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...
### Java内部类(DOC)详解 #### 一、概述 Java内部类是Java语言中一个重要的概念,它指的是那些类定义被嵌套在其他类定义中的类。与之相对应的是顶层类,即那些类定义没有被嵌套在其他类中的类。内部类又可以...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...