Java 内部类、成员类、局部类、匿名类等
《Java程序设计基础》课程标准

《Java程序设计基础》课程标准一、课程说明二、课程定位《Java程序设计基础》课程是面向软件与信息服务专业学生开设的必修专业课。
通过本课程的学习,能使学生掌握程序设计的基本思想与方法,掌握面向对象编程技术,常用系统类使用,图形用户界面设计,图形处理,多媒体处理,异常处理,文件和流处理,多线程技术和网络编程技术,为学生后续知识(如:Android开发技术)的学习打下基础,同时也为毕业后从事相关专业职业岗位工作具备基本计算机应用能力打下坚实的基础。
三、设计思路《Java程序设计基础》是一门实践性很强的课。
Java语言作为一门经典的面向对象高级程序设计语言其优势在于网络程序设计。
《Java程序设计基础》课程主要侧重于面向对象程序设计和简单网络程序设计实践能力的培养。
该课程的任务,不只是为了要求学生学会使用某种特定的语言,更重要的是要求学生学习面向对象的软件设计思想,以此拓展学生的软件设计的思维空间,训练学生的软件设计的实际开发能力。
在教学过程中注重培养提高学生的职业岗位技能和职业素质,力求达到岗位技能和职业标准。
教学要求在每一章教学内容之后给出,大体分为三个层次:了解、掌握和熟练掌握。
它们的含义大致为:了解就是掌握概念,掌握就是能够理解和分析现有知识,熟练掌握就是会运用所学知识解决实际问题。
四、课程培养目标(一)专业能力1.通过学习使得学生掌握Java开发工具,掌握面向对象程序的基本结构,能够完成基本类的设计和应用。
2.掌握程序设计的基础:基本的数据类型,运算符、表达式和语句。
3.掌握程序设计的结构、设计方法。
4.掌握数组和字符串的使用。
5.掌握继承的概念、能够正确地实现继承。
6.能够准确地理解接口,掌握接口的设计和实现方法。
7.理解异常处理的概念,能够准确地应用异常的处理方法,在未来工作中处理不同异常。
8.掌握集合类的概念和使用方法。
9.掌握图形界面的设计方法,掌握不同组件的功能和使用方法,掌握布局的设计方法。
Java内部类(转)

Java内部类(转)内部类 ———定义在类的内部的类为什么需要内部类? 典型的情况是,内部类继承⾃某个类或实现某个接⼝,内部类的代码操作创建其的外围类的对象。
所以你可以认为内部类提供了某种进⼊其外围类的窗⼝。
java中的内部类和接⼝加在⼀起,可以实现多继承。
可以使某些编码根简洁。
隐藏你不想让别⼈知道的操作。
使⽤内部类最吸引⼈的原因是: 每个内部类都能独⽴地继承⾃⼀个(接⼝的)实现,所以⽆论外围类是否已经继承了某个(接⼝的)实现,对于内部类都没有影响。
如果没有内部类提供的可以继承多个具体的或抽象的类的能⼒,⼀些设计与编程问题就很难解决。
从这个⾓度看,内部类使得多重继承的解决⽅案变得完整。
接⼝解决了部分问题,⽽内部类有效地实现了“多重继承”。
内部类分为: 成员内部类、静态嵌套类、⽅法内部类、匿名内部类。
特点: ⼀、内部类仍然是⼀个独⽴的类,在编译之后内部类会被编译成独⽴的.class⽂件,但是前⾯冠以外部类的类命和$符号。
⼆、内部类可以直接或利⽤引⽤访问外部类的属性和⽅法,包括私有属性和⽅法(但静态内部类不能访问外部类的⾮静态成员变量和⽅法)。
内部类所访问的外部属性的值由构造时的外部类对象决定。
三、⽽外部类要访问内部类的成员,则只能通过引⽤的⽅式进⾏,可问内部类所有成员 四、访问机制: System.out.println(this.x);或System.out.println(x);//内部类访问内部类的成员变量或成员⽅法可⽤此⽅法。
System.out.println(OuterClass.this.x);//内部类访问外部类的同名变量时可⽤此⽅法,如果没有同名可⽤System.out.println(x); 五、内部类可以使⽤任意的范围限定:public/private/protected class InnerClass,且严格按照这⼏种访问权限来控制内部类能使⽤的范围。
普通类的范围限定只可以是public或者不加。
Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类) 我们先看这样⼀段话:⼈是由⼤脑、肢体、器官等⾝体结果组成。
⽽组成我们⼈体的⼼脏它也有⾃⼰的属性和⾏为(⾎液、跳动),显然,此处不能单⽅⾯⽤属性或者⽅法表⽰⼀个⼼脏了,⽽需要⼀个类,但是这个类要依赖于⼈这个类存在(因为⼼脏不能脱离⼈体⽽存活,当然不考虑现今社会的发达科技,只从正常情况下来说),所⼼脏以需要写在⼈类的内部。
内部类就相当于其中的某个器官之⼀。
⾸先看看什么是内部类:在类的内部定义另⼀个类。
没错,定义就这么简单。
如果在类Outer的内部再定义⼀个类Inner,此时Inner就称为内部类,⽽Outer则称为外部类。
内部类的定义格式如下:public class外部类的名称{//外部类的成员public class内部类的名称{//内部类的成员}}使⽤内部类有什么好处;1)实现多重继承;2)内部类可以很好的实现隐藏:⼀般的⾮内部类,是不允许有 private 与protected权限的,但内部类可以3)减少了类⽂件编译后的产⽣的字节码⽂件的⼤⼩使⽤内部类的缺点:使程序结构不清楚。
内部类在编译完成后也会产⽣.class⽂件,但⽂件名称是:外部类名称$内部类名称.class内部类的种类:成员内部类、静态内部类、局部内部类、匿名内部类。
下⾯分别详细学习⼀下这四种内部类的具体使⽤。
⼀、成员内部类1、成员内部类也叫实例内部类。
应⽤场合:每⼀个外部类对象都需要⼀个内部类的实例,内部类离不开外部类存在(相当于⼼脏对⼈体)2、成员内部类的特征:作为外部类的⼀个成员存在,与外部类的属性、⽅法并列成员内部类持有外部类的引⽤成员内部类中不能定义static变量和⽅法3、使⽤格式:Outer outer = new Outer();Outer.Inner inner = outer.new Inner();代码演⽰⼀:/** 成员内部类*/public class Body {String arm;String leg;String blood;public Body(String arm, String leg, String blood) {super();this.arm = arm;this.leg = leg;this.blood = blood;}//内部类Heartclass Heart{String name;void work() {System.out.println("⼼脏正在给"+arm+leg+"输"+blood);}};}public class Test {public static void main(String[] args) {Body body=new Body("两个胳膊","两条腿","⾎");Body.Heart heart=body.new Heart();heart.work();}}运⾏截图:代码演⽰⼆:/** 成员内部类*/public class Outer {private String name="Hello World";public class Inner{public void print(){System.out.println(name);}};public void print(){//定义外部类⽅法new Inner().print();//通过内部类的实例化对象调⽤⽅法}public static void main(String[] args) {Outer outer=new Outer();outer.print();//调⽤外部类的⽅法}}运⾏截图:解释⼀下,上述代码中,new Inner().print();代码相当于Inner inner=new Inner();Inner.print();⼆、静态内部类1、内部类如果使⽤static声明,则此内部类就称为静态内部类。
java typereference 二层嵌套 -回复

java typereference 二层嵌套-回复Java中的嵌套类型(Nested Types)是指在一个类中定义另一个类。
这种二层嵌套类型可以是内部类(Inner Class),也可以是静态嵌套类(Static Nested Class)。
在本文中,我们将探讨Java中的二层嵌套类型,并深入了解它们的使用和作用。
首先,让我们从内部类开始。
内部类是指在另一个类内部定义的类。
这种定义方式使得内部类可以直接访问外部类的成员变量和方法,而不需要使用实例变量。
内部类有四种类型:成员内部类(Member Inner Class)、局部内部类(Local Inner Class)、匿名内部类(Anonymous Inner Class)和静态内部类(Static Inner Class)。
成员内部类是最常见的内部类类型,它是在外部类的成员位置上定义的。
下面是一个例子:javapublic class Outer {private int outerField;成员内部类public class Inner {public void printField() {System.out.println("外部类的成员变量outerField 的值是:" + outerField);}}}在这个例子中,类`Inner`是类`Outer`的成员内部类。
它可以直接访问外部类`Outer`的成员变量`outerField`。
为了创建内部类的实例,我们需要先创建外部类的实例,然后使用外部类的对象来创建内部类的对象,如下所示:javapublic class Main {public static void main(String[] args) {Outer outer = new Outer();Outer.Inner inner = outer.new Inner();inner.printField();}}在上面的示例中,我们首先创建外部类`Outer`的实例`outer`,然后使用`outer`来创建内部类`Inner`的实例`inner`。
Java局部内部类和匿名内部类的使用

匿名内部类的使用 分析
匿名内部类也就是没有名字的内部类正 因为没有名字,所以匿名内部类只能使用 一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必 须继承一个父类或实现一个接口. 格式: new 父类构造方法(参数列表)实现接口{ //匿名内部类的主体部分 }
匿名内部类的使用
• 就是匿名内部类的两种实现方式:第一种, 继承一个类,重写其方法;
匿名内部类的使用
• package com.yueqian.test; • • • • • • • • • • • public class B { public static void main(String[] args) { A a = new A(){ @Override void show() { // TODO Auto-generated method stub System.out.println("123"); } }; } }
匿名内部类的使用—接口
• • • • • • • • • • • • • • interface Person { public void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
匿名内部类的使用
• 第二种,实现一个接口/抽象类(可以是多 个),实现其方法。下面通过代码来说明:
匿名内部类的使用—未使用匿名内部类
• • • • • • • • • • • • • • • • abstract class Person { public abstract void eat(); } class Child extends Person { public void eat() { System.out.println("eat something"); } } public class Demo { public static void main(String[] args) { Person p = new Child(); p.eat(); } }
实验3:java内部类

实验三:内部类实验说明:本实验通过测试对话框来来实现测试内部类实验。
在该实验中,定义了成员内部类MyMoliter和MyDialog1,局部内部类MyDialog2,还有在Button1上通过添加匿名内部类来添加动作事件。
运行结果:点击确定后点击取消后源代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class InnerClassTest{public static void main(String[] arges){MyFrame f = new MyFrame();}}class MyFrame extends Frame{/*在类MyFrame中定义成员内部类MyMoliter和MyDialog1 成员内部类定义在一个里面,方法体外面*/class MyMoliter implements ActionListener {public void actionPerformed(ActionEvent e) { MyDialog1 dialog = new MyDialog1();dialog.setVisible(true);}}class MyDialog1 extends JDialog {public MyDialog1() {setBounds(50, 50, 200, 100);Label lbl = new Label("欢迎进入这个界面!");add(lbl);}}public MyFrame() { //MyFrame的构造方法super("InnerClassTest!");/*在构造方法中定义局部内部类MyDialog2局部内部类定义在一个方法体的里面*/class MyDialog2 extends JDialog {public MyDialog2() {setBounds(50, 50, 200, 100);Label lbl = new Label("谢谢您的使用!");add(lbl);}}setLayout(new FlowLayout(FlowLayout.LEFT, 20, 40)); setBounds(100, 100, 300, 200);JButton b1 = new JButton("取消");JButton b2 = new JButton("确定");b2.addActionListener(new MyMoliter());add(b2);/*在JButton b1上添加动作事件,是用匿名内部类 */b1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) { MyDialog2 dialog = new MyDialog2();dialog.setVisible(true);}});add(b1);pack();setVisible(true);}}。
java内部类知识点总结

java内部类知识点总结Java内部类是Java语言的一个重要特性,它允许在一个类的内部定义另一个类。
本文将从以下几个方面对Java内部类进行总结:1. 内部类的定义和特点内部类是指在一个类的内部定义的另一个类,它可以被看作是一个类的成员。
内部类可以访问外部类的所有成员,包括私有成员,而外部类不能直接访问内部类的成员。
内部类对外部类的访问具有完全访问权,而外部类对内部类的访问则需要通过内部类的实例来进行。
内部类可以被定义为静态或非静态的,静态内部类可以访问外部类的静态成员,而非静态内部类则不能访问外部类的静态成员。
2. 内部类的分类Java内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。
成员内部类是指在类的内部定义的非静态类,它可以访问外部类的所有成员,并且可以被外部类的其他成员访问。
成员内部类可以被看作是外部类的一个成员,它可以访问外部类的成员变量和成员方法,而外部类则不能直接访问成员内部类的成员。
局部内部类是定义在方法或作用域内的内部类,它只能在定义它的方法或作用域内使用,局部内部类可以访问外部类的所有成员,但是外部类不能访问局部内部类的成员。
匿名内部类是没有名称的内部类,它通常用于继承一个类或实现一个接口,并且只使用一次。
匿名内部类必须继承一个类或实现一个接口,并且必须在创建对象时实现它的方法,它可以访问外部类的所有成员。
静态内部类是定义在类的内部的静态类,它可以访问外部类的静态成员,但是不能访问外部类的非静态成员。
静态内部类可以被看作是外部类的一个静态成员,它只能访问外部类的静态成员,而不能访问外部类的非静态成员。
3. 内部类的应用场景内部类在Java中有着广泛的应用场景,其中最常见的应用场景包括以下几个方面:3.1 实现多重继承Java中不支持多重继承,但是通过使用内部类可以实现类似于多重继承的功能。
例如,一个类可以继承一个类,并且在内部定义一个实现接口的内部类,从而实现多重继承的效果。
Java的内部类和匿名类剖析

Java的内部类和匿名类剖析Java 1.1通过对Java语言规范进行修改,显着简化了一些实用结构的实现。
在那些修改中,最引人注目的就是内部类和匿名类。
如运用得当,它们可使程序更易理解和维护。
本文介绍内部类和匿名类在Java代码中是如何具体工作的,如何正确使用它们,以及如何避免一些常见的错误。
下面来看看这些特性具体是如何工作的?1、非静态内部类如果内部类没有指定static修饰符,就拥有对外部类的所有成员的完全访问权限,包括实例字段和方法。
为实现这一行为,非静态内部类存储着对外部类的实例的一个隐式引用。
所以,对一个非静态内部类进行实例化需要采用不同语法的new语句:2、引用内部类内部类最自然的一种应用就是声明只在另一个类的内部使用的类,或者声明与另一个类密切相关的类。
如清单B所示,它是一个链表的简单实现。
由于Node类通常只在LinkedList 的范围内使用,所以最好将Node声明为LinkedList的一个内部类。
适用于类成员的访问控制修改符也适用于内部类;也就是说,内部类可以具有package、protected、private和public 访问权限,它们的语义和正常的语义没有什么不同。
由于Node要在LinkedList的外部使用,所以把它声明为public.然而,修饰符static具有不同的含义。
应用于内部类时,它声明的类具有与其他类相同的语义,也就是可进行实例化,并像一个标准类那样使用。
惟一的区别就是它拥有对外部类的所有静态成员的完全访问权限。
清单C展示了一个简单的程序,它创建一个链表,并将它打印到标准输出设备。
3、更优化的代码内部和匿名类是Java 1.1为我们提供的两个出色的工具。
它们提供了更好的封装,结果就是使代码更容易理解和维护,使相关的类都能存在于同一个源代码文件中(这要归功于内部类),并能避免一个程序产生大量非常小的类(这要归功于匿名类)。
4、new这种形式的new语句要求外部类的一个实例,使内部类能在那个实例的上下文中创建。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Java 内部类、成员类、局部类、匿名类等
2016/10/13 0 Java 各种称呼类详解Java 有各种各样类,内部类、嵌套类、成员类、局部类(本地类)、静态类、匿名类、文件类以及这些组合起来的称呼类,成
员内部类,成员匿名类,成员嵌套类,本地匿名类等,真是多的不行,但有些其实
是一个意思,在这里好好理一理。
声明 1.注意,这些称呼都是翻译过来的,但是同一个英文单词或一个词组翻译过
来可能有不同叫法,比如local nested class,local 有局部、本地意思,其实是一个意思,local nested class 翻译过来就是局部嵌套类(本地嵌套类),又因为非静态嵌套类都称为内部类,因此local nested class 又叫为内部局部类(本地内部类),最终又简称为:局部类(本地类)。
我个人觉得局部类更加形象点因此下面都优先采用局部
类一说。
2.我通过搜索找到两种不太相同的内部类定义,一种认为:定义在类里面
的称为嵌套类(nested class),而非静态嵌套类才是内部类(inner class),也就是说嵌套类包含内部类;另外一种则是认为:定义在类里面的称为内部类,这样静态嵌套类
也是内部类,也就是说嵌套类=内部类。
但是,第一种才是Java 语言规范规定的,
我一开始不确定,找到Java7 的语言规范验证,结果确实如此,即第一种才是正确
的,那么问题来了:依照第一种划分,静态内部类其实是一种错误说法。
只有静
态嵌套类,内部类是没有静态一说的!但是对于大多数中国程序员,貌将定义在
类里面的类称为内部类不是更符合文意么?也许这就是为什么会有这么多人一直认
为静态内部类的存在。
嘛,反正不管怎么称呼,只要知道代表什么意思就好,细节
什么的不要在意(光哥:因此不注意细节的你写的代码才这么一大堆bug 么?还不
赶紧去改(怒))。
我这里采用Java 语言规范上说的。
0.文件类文件类放在最前面,是因为文件类是与主类(一个文件中public 类)关
系最不密切的一类。
什么是文件类?看代码就知道:
code >class Test{} span > span > span >【注意】:主类这一定义是我自己按语义称呼的,有的地方称为基本类,但我觉得很不符合语义,Java 语言规范我也没找到相
关定义。