三九宝宝网宝宝百科宝宝知识

Java静态内部类的使用

02月27日 编辑 39baobao.com

[承内部类的构造器问题]代码如下:class Car {class Wheel {}}class PlaneWheel extends Car.Wheel {PlaneWheel(Car car) {car.super(); 这句什么意思?为什么要这样写?}public static void m...+阅读

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。

1、静态内部类定义

静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。

生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。可以定义私有静态内部类。

2、java实现静态内部类注意事项

将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说,主要有如下几个地方要引起注意。

1)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员

2)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是如果一个内部类被声明为static,则其在访问包括自身的外部类会有诸多的限制。静态内部类不能访问其外部类的非静态成员变量和方法

3)在一个类中创建非静态成员内部类的时候,有一个强制性的规定,即内部类的实例一定要绑定在外部类的实例中。然后要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。即在创建静态类内部对象时,不需要其外部类的对象

3、静态内部类示例

java在实现LinkedList时使用了如下内部类:

public class LinkedList

extends AbstractSequentialList

implements List, Deque, Cloneable, java.io.Serializable

{

........

private static class Entry {

E element;

Entry next;

Entry previous;

Entry(E element, Entry next, Entry previous) {

this.element = element;

this.next = next;

this.previous = previous;

}

}

private Entry addBefore(E e, Entry entry) {

Entry newEntry = new Entry(e, entry, entry.previous);

newEntry.previous.next = newEntry;

newEntry.next.previous = newEntry;

size++;

modCount++;

return newEntry;

}

........

}

这里即静态内部类的典型用法

Java中怎样使用匿名内部类

JAVA中匿名内部类使用最常见,用起来最方便的地方是在进行GUI编写时,添加控件响应事件时。在为控件添加事件时使用内部匿名类是大家常用的方法,我这里举一个列子,相信你看过之后既能理解又会用了。

这是为一个按钮添加一个左键单击事件,点单击后打印 hello!!

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

import javax.swing.*;

public class Press {

/** * param args */ JFrame jf = new JFrame("内部匿名类演示"); //创建一个JFrame组件 JButton jb = new JButton("Press me"); //创建按钮 JLabel jt = new JLabel(); //创建一个标签用来输出“hello!!” public Press(){ jf.add(jb,BorderLayout.SOUTH); //添加按钮 jf.add(jt,BorderLayout.CENTER); //添加标签 jf.setSize(200,200); //设置jf大小 jf.setVisible(true); //设置jf为可见 /*接下来是内部匿名类的应用了,为jb添加一个左键单击响应事件*/ jb.addActionListener(new ActionListener(){ /*这里就是内部匿名类了,没有类名,下面是类的方法体*/

Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub jt.setText("hello!!"); }}); } public static void main(String[] args) { // TODO Auto-generated method stub Press p =new Press(); }

}

你可以试着给jf添加一个事件响应,让它点*可以关掉,这样你就能理解匿名内部类了,再看看书里对“内部类”、“匿名类”的介绍,一个个理解这样“匿名内部类”就没问题了

简朴java有几种内部类使用有什么要求

Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理。其实,做非GUI编程,内部类完全可以不用。但是在Java中,内部类也相当的重要,尤其做GUI开发时候,事件的响应处理全靠内部类了。

另外内部类所做的功能使用外部类也同样可以实现,只是有时候内部类做的更巧妙些。

内部类按照其所在位置不同,可分为以下几种:

1、(普通的)内部类(最常见的内部类,内部类的定义与类成员平级,)

2、方法内部类

3、匿名类

4、静态内部类

5、接口内部类

另外内部类声明与访问如下:

1、内部类直接在类的内部进行声明。可以声明为private、protected、public或者默认访问权限,这个访问权限约定和外部类完全一样。

2、内部类自动拥有对其外围类所有成员(方法、属性)的访问权。如果内部类和外部类成员的名字完全相同,在内部类方法中要访问外部类成员,则需要使用下面的方式来访问:外部类名.this.外部成员名。

3、必须使用外部类对象来创建内部类对象,而不是直接去new一个。

以下为关联文档:

在java中一个类的修饰符有哪些一:访问修饰符: 1.省略访问修饰符 具有默认的访问特性,即具有包访问特性,只能被同一个包中的类使用。 2.public访问修饰符 用于说明类和类的成员的访问权限。这种类叫公有类。在...

Java内部类的修饰符有哪些一、内部类可以为四种: ⒈ 静态内部类 ⒉ 成员内部类 ⒊ 局部内部类 ⒋ 匿名内部类几种内部类的共性: A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class...

java中类的定义格式类的常用修饰符及其含义是什么1.public 使用对象:类、接口、成员 介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的 2.private 使用对象:成员 介绍:成员只可以在定义它的类中被访问 3.static 使用对...

列举出java中类的修饰符再随便写几段java程序要完整类的修饰符分为公有的public,保护的protected,默认的(不加任何关键字),私有的private //圆,通过r,求周长与面积 import java.util.Scanner; public class Circle{ private double r...

经济学中静态分析比较静态分析与动态分析的区别以下内容摘自西方经济学的教材 静态分析(static analysis)就是分析经济现象的均衡状态以及有关的经济变量达到均衡状态所需要具备的条件,它完全抽调了时间因素和具体变动的过程...

如何使用Java POI生成Excel表文件private static void WriteExcel2010() throws IOException { String path="C:\\poi2.xlsx"; XSSFWorkbook workbook=new XSSFWorkbook(); XSSFSheet sheet=workbook.createSh...

java新手为什么 java类中要有 static静态方法??1。静态方法的特点: 直接调用类名+方法名,不需要实例化类对象。 如: Hello.P(); 非静态方法则必须实例化一个对象出来,再通过对象调用该方法如: Hello hello=new Hello(参数1~n); h...

思科模拟器使用静态路由访问内网各服务器的详细实施步骤不详一段一段写呗 , 假定 路由器0 左边为一个子网192.168.1.0 /24 右边 到路由器1 为192.168.2.0/30 , 路由器1右边为172.16.1.0/24 ,,则,只需要在路由器0 上添加以下命令:ip route 17...

java string使用了什么设计模式快速开发设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码...

推荐阅读
图文推荐