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语句要求外部类的一个实例,使内部类能在那个实例的上下文中创建。
内部类的理解
内部类的理解Java中可以定义一个类在另一个类的内部,这个被定义的类称为内部类。
Java的内部类包括成员内部类、局部内部类、匿名内部类和静态内部类。
成员内部类是嵌套在另一个类中的类,它可以访问外部类的成员,包括私有成员。
例如,一个人类(外部类)中可以包含若干个眼类(内部类),眼类可以访问人类的姓名、年龄等信息。
局部内部类是定义在方法内部的类,它与方法的局部变量具有相同的作用域,并且只能在方法内部被访问。
局部内部类的优点在于可以访问方法内的变量和参数,缺点是只能在方法中使用。
例如,一个计算器类中的某个方法可以包含一个局部内部类,用于实现某一项特殊计算。
匿名内部类是一个没有名称的内部类,它通常是在创建对象时定义的。
它没有实际的类定义,在创建时会自动创建一个子类,这个子类是继承了某个父类或者实现了某个接口。
匿名内部类的优点在于可以省略掉类定义的步骤,方便代码编写。
例如,一个控制台应用程序中可以使用一个匿名内部类来监听键盘输入事件。
代码如下:```import java.awt.event.*;import javax.swing.*;public class KeyListenerExample extends JFrame {public KeyListenerExample() {addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent event) {System.out.println("键盘按下了:" + event.getKeyChar());}});setSize(400, 400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}静态内部类是一个独立的类,它与外部类的实例无关,可以通过外部类名称直接访问。
静态内部类通常用于将一组相关的方法或常量封装在一个类中。
java内部类
Java内部类总结内部类是指在一个外部类的内部再定义一个类。
内部类作为外部类的一个成员,并且依附于外部类而存在的。
内部类可为静态,可用protected和private修饰(而外部类只能使用public 和缺省的包访问权限)。
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。
为什么需要内部类?典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。
所以你可以认为内部类提供了某种进入其外围类的窗口。
使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。
从这个角度看,内部类使得多重继承的解决方案变得完整。
接口解决了部分问题,而内部类有效地实现了“多重继承”。
所谓内部类(Inner Class),顾名思义,就是指定义在另外一个类中的类,我们为什么要这么做呢?为什么不直接定义它而要在别的类中定义一个内部类呢?这样做主要有如下三个原因:1.内部类的方法可以访问它所在的外部类中的所有域,包括私有型别的;2.对于同一个包中的其它类它是隐藏的;3.匿名的内部类可以让我们很方便的定义事件响应(call back),这在GUI编程中很常见;一.内部类(inner class)如何访问外部类(outer class)中的域因为安全机制的原因,内部类通常声明为private类别,因此,只有在内部类所在的外部类中才能够创建内部类的对象,对其它类而言它是隐藏的。
另外,只有内部类才会用到private修饰符,一般的类如果用private修饰符则会报错。
下面看如下的代码:package .hust.cm.test;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.Toolkit;import javax.swing.JOptionPane;import javax.swing.Timer;public class InnerClassTest {public InnerClassTest() {super();// TODO Auto-generated constructor stub}public static void main(String[] args) {Court court=new Court(10000,true);court.start();JOptionPane.showMessageDialog(null,"停止么,CMTobby?");System.exit(0);}}class Court{public Court(int interval,boolean beep){this.interval=interval;this.beep=beep;}public void start(){TimerPrinter action=new TimerPrinter();Timer t=new Timer(interval,action);t.start();}private int interval;private boolean beep;private class TimerPrinter implements ActionListener{ public void actionPerformed(ActionEvent e){System.out.println("Cindyelf,would you be my mm?");if(beep) Toolkit.getDefaultToolkit().beep();}}}注意上面红色加粗部分的代码,如你所见beep这个变量在内部类TimerPrinter中我们并没有声明,那么它引用自何处呢?显然是来自于外部类。
java面试ddd
感觉这个题很水,要说C++的话有区别,感觉JAVA里区别不大.反正中软的题目里我就瞎扯了.单纯从字面的角度去说,error就是严重的错误,像JVM产生的一些错误等,会停止程序运行或产生错误结果.exception是一定程度上可预见的错误,可以捕获以及处理.其实error也可以捕获...
new <类或接口> <类的主体>
这种形式的new语句声明一个新的匿名类,他对一个给定的类进行扩展,或实现一个给定的接口。他还创建那个类的一个新实例,并把他作为语句的结果而返回。
这就是匿名类的实质,它本身就是一个类的继承或一个接口的实现,所以继承其它类或借口是无意义的.在eclipse中冶证实了我的想法.无论是继承其它类还是实现其它借口都显示Syntax error on token
static nested class相当于inner class中的静态成员类.
实例代码就不贴了,太累,发个地址,这篇帖子说的相当详细,就是有点累赘.
/oop/725592.html
第四,&和&&的区别。这个问得很少。
&和^,<<,<<<,|同属于位运算符,其中&是按位与,例如,1&1=1,1&0=0,&&是逻辑运算符,处理真假值,例如,true&&true=true
Math.round(x)相当于(int)Math.floor(x+o.5f),
故math.round(11.5)=Math.floor(11.5+0.5)=Math.floor(12)=12;
Math.round(-11.5)=Math.floor(-11)=-11;
调用内部类的方法
调用内部类的方法要调用内部类的方法,首先需要了解什么是内部类。
内部类是指嵌套在其他类中的类,可以直接访问外部类的成员变量和方法,并能够访问私有变量和方法。
内部类的主要作用是实现代码的封装和隐藏。
在Java中,有四种类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类。
不同类型的内部类的调用方式存在一定的差异。
首先,成员内部类是定义在一个类中的类,可以直接访问外部类的成员变量和方法。
要调用成员内部类的方法,首先需要创建外部类的对象,然后通过外部类对象创建内部类的对象,最后通过内部类对象调用方法。
以下是一个示例代码:javapublic class OuterClass {private int outerData;public class InnerClass {public void innerMethod() {System.out.println("Inner method called");}}public void outerMethod() {InnerClass inner = new InnerClass();inner.innerMethod();}public static void main(String[] args) {OuterClass outer = new OuterClass();outer.outerMethod();}}上述代码定义了一个外部类`OuterClass`和一个成员内部类`InnerClass`。
在`outerMethod`方法中,创建了`InnerClass`的对象`inner`,然后调用了`innerMethod`方法。
调用成员内部类的方法的关键是要先创建外部类的对象,然后通过外部类对象创建内部类的对象,并且调用方法时要使用内部类对象来调用。
另外一种类型的内部类是静态内部类,它与外部类的关系更加独立,可以直接访问外部类的静态成员变量和方法,而不需要创建外部类的对象。
java高级工程师面试题及答案
java高级工程师面试题及答案一、Java基础知识1. 请简述Java语言的特点和优势。
Java是一种跨平台的编程语言,具有以下特点和优势:- 简单易学:Java采用C/C++风格的语法,使得开发者可以快速上手。
- 面向对象:Java是一种面向对象的语言,通过封装、继承和多态等特性,使得程序更加模块化、可复用和可维护。
- 平台无关性:Java应用程序可以在不同的操作系统平台上运行,只需编译一次即可。
- 高效性能:Java通过垃圾回收机制和即时编译器(Just-In-Time Compiler)来提高性能,同时拥有高度优化的运行时环境。
- 安全性:Java提供了安全的执行环境,通过类加载器、字节码验证和安全管理器等机制,防止恶意代码的执行。
2. 什么是Java的自动装箱和拆箱?自动装箱(Autoboxing)和拆箱(Unboxing)是Java编译器提供的便利功能。
- 自动装箱:将基本数据类型转换为对应的包装类对象,例如将int 类型转换为Integer对象。
- 自动拆箱:将包装类对象转换为基本数据类型,例如将Integer对象转换为int类型。
自动装箱和拆箱使得基本数据类型和包装类之间的转换更加方便,可以在需要包装类的地方直接使用基本数据类型,编译器会自动进行装箱或拆箱操作。
3. 请简述Java中的重载和重写的区别。
- 重载(Overload):指在同一个类中,方法名相同但参数列表不同的多个方法,可以具有不同的返回类型。
重载可以通过参数个数、类型或顺序的不同来实现。
重载的方法可以拥有不同的访问修饰符。
- 重写(Override):指在子类中重新定义父类的方法,方法名、参数列表和返回类型均相同。
重写方法不能拥有比父类更低的访问修饰符,可以拥有与父类方法相同或更宽松的异常抛出声明。
重载和重写都是多态的一种表现形式,通过编译器和虚拟机的不同处理方式来实现。
4. 请解释Java中的final关键字的作用。
java中inner的用法
java中inner的用法Java中的Inner用法Inner在Java中是一种内部类的概念。
内部类是指嵌套在其他类中的类,它可以访问外部类的成员,并确保代码的封装和组织的更好。
在Java中,Inner类有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。
本文将介绍这四种Inner类的用法和特点。
一、成员内部类成员内部类是定义在另一个类内部的普通类。
它拥有访问外部类所有成员的权限,包括私有成员。
下面是一个示例:```javaclass OuterClass {private int outerData;class InnerClass {private int innerData;public void accessOuterData() {System.out.println(outerData);}}}```在上面的代码中,InnerClass是OuterClass的成员内部类。
可以在InnerClass中访问OuterClass中的成员变量outerData。
使用成员内部类需要先创建OuterClass对象,然后再创建InnerClass对象:```javaOuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();inner.accessOuterData();```二、局部内部类局部内部类是定义在方法或作用域内的类。
它的作用域限定在定义它的块中。
下面是一个示例:```javaclass OuterClass {public void outerMethod() {int outerData = 10;class InnerClass {public void innerMethod() {System.out.println(outerData);}}InnerClass inner = new InnerClass();inner.innerMethod();}}```在上面的代码中,InnerClass是outerMethod方法的局部内部类。
Java术语表
Java术语表英文中文access control 访问控制accessibility 可访问能力,可访问性accessor method 访问方法adapter pattern 适配器模式annotation type 注解类型anonymous class 匿名类antipattern 反模式API (Application Programming Interface)应用编程接口API element API元素array 数组assertion 断言binary compatibility 二进制兼容性bit field 位域bounded wildcard type 有限制的通配符类型boxed primitive type 基本包装类型callback 回调callback framework 回调框架checked exception 受检异常class 类client 客户端code inspection 代码检验comparator 比较器composition 复合concrete strategy 具体策略constant interface 常量接口constant-specific class body 特定于常量的类主体constant-specific method implementation 特定于常量的方法实现copy constructor 拷贝构造器covariant 协变的covariant return type 协变返回类型custom serialized form 自定义的序列化形式decorator pattern 装饰模式default access 缺省访问default constructor 缺省构造器defensive copy 保护性拷贝delegation 委托deserializing 反序列化design pattern 设计模式documentation comment 文档注释double-check idiom 双重检查模式,双检法dynamically cast 动态地转换encapsulation 封装enclosing instance 外围实例enum type 枚举类型erasure 擦除exception 异常exception chaining 异常链exception translation 异常转换explicit type parameter 显式的类型参数exponentiation 求幂exported API 导出的APIextend 扩展failure atomicity 失败原子性field 域finalizer guardian 终结方法守卫者forwarding 转发forwarding method 转发方法function object 函数对象function pointer 函数指针general contract 通用约定generic 泛型generic array creation 泛型数组创建generic method 泛型方法generic singleton factory 泛型单例工厂generic static factory method 泛型静态工厂方法generification 泛型化heterogeneous 异构的idiom 习惯用法,模式immutable 不可变的implement 实现(用作动词)implementation 实现(用作名词) implementation inheritance 实现继承information hiding 信息隐藏inheritance 继承inner class 内部类int enum pattern int枚举模式interface 接口interface inheritance 接口继承invariant 不可变的lazy initialization 延迟初始化local class 局部类marker annotation 标记注解marker interface 标记接口member 成员member class 成员类member interface 成员接口memory footprint 内存占用memory model 内存模型meta-annotation 元注解method 方法migration compatibility 移植兼容性mixin 混合类型module 模块mutator 设值方法naming convention 命名惯例naming pattern 命名模式native method 本地方法native object 本地对象nested class 嵌套类non-reifiable 不可具体化的nonstatic member class 非静态的成员类object 对象object pool 对象池object serialization 对象序列化obsolete reference 过期引用open call 开放调用operation code 操作码Java专业术语标准化规范表-A-AJAX: (建议不译,原因:专有名词) [Asynchronous JavaScript and XML,异步JavaScript及XML]annotation: 注解Ant: (建议不译,原因:专有名词)AOP: (建议不译,原因:专有名词) [aspect-oriented programming, 面向方面编程] application: 应用argument: 参数-B-B2B: (建议不译,原因:专有名词) [Business-to-Business, 业务对业务]BAM: (建议不译,原因:专有名词) [Business Activity Monitoring, 业务活动监测]BMP: (建议不译,原因:专有名词) [bean-managed persistence, Bean管理的持久化] BPEL: (建议不译,原因:专有名词) [Business Process Excution Language, 业务流程执行语言]BPM: (建议不译,原因:专有名词) [Business Process Modeling, 业务流程建模]build: 建立;编译-C-C2B: (建议不译,原因:专有名词) [Consumer-to-Business, 客户对业务]CAD: (建议不译,原因:专有名词) [Computer Aided Design, 计算机辅助设计]CAM: (建议不译,原因:专有名词) [Computer Aided Modeling, 计算机辅助建模]case-insensitive: 大小写不敏感case-sensitive: 大小写敏感container: 容器cluster: 集群CMP: (建议不译,原因:专有名词) [container-managed persistence, 容器管理的持久化] component: 组件,部件configuration: 配置context: 上下文,环境control: 控件convention: 约定CORBA: (建议不译,原因:专有名词) [Common Object Request Broker Architecture,公共对象请求代理体系]COS: (建议不译,原因:专有名词) [Common Object Services,公共对象服务]couple: 耦合CRUD: 专指数据库操作create, read, update, delete,可以不译-D-Daemon: (建议不译,原因:专有名词) [Internet中用于邮件收发的后台程序]DAO: (建议不译,原因:专有名词) [Data Access Object, 数据访问对象]data: 数据DBMS: (建议不译,原因:专有名词) [Database Management System, 数据库管理系统] DDL: (建议不译,原因:专有名词) [Data Definition Language, 数据定义语言] Declarative Programming: 声明式编程delegate: 委托Dependency Injection: 依赖注入deploy: 部署deserialize: 反序列化(也可译为反串行化),即取出dialect: (行业)术语directive: 指令DIT: (建议不译,原因:专有名词) [Directory Information Tree, 目录信息树]DML: (建议不译,原因:专有名词) [Data Manipulation Language, 数据操作语言]DNS: (建议不译,原因:专有名词) [Internet Domain Name System, 因特网域名系统] domain: 域DSL: (建议不译,原因:专有名词) [Domain-Specific Languages, 特定领域语言]DTOs: (建议不译,原因:专有名词) [data transfer objects, 数据传输对象]-E-EAI: (建议不译,原因:专有名词) [Enterprise Application Integration: 企业应用集成] ECC: (建议不译,原因:专有名词) [error correcting codes: 错误纠正代码]EIS: (建议不译,原因:专有名词) [Enterprise Information System: 企业信息系统]EJB: (建议不译,原因:专有名词) [Enterprise JavaBean, 企业JavaBean]encapsulate: 封装ESB: (建议不译,原因:专有名词) [Enterprise Service Bus, 企业服务总线]event: 事件-F-FAQs: (建议不译,原因:专有名词) [Frequently Asked Questions, 经常提问的问题] FIFO: 先进先出[First in, First out]fire: 触发firewall: 防火墙framework: 框架function: 函数-G-GoF: "四人帮",对名著Design Patterns-Elements of Reusable Object-Oriented Software的四名作者的"戏"称。
第5章 Java面向对象编程进阶
•{
•
……; //类体:包含属性和方法
•}
• “extends”表明要构造的新类(子类),是从一 个已有的类(父类)衍生出来的。子类中继承了 父类中非private的全部属性和方法,同时还可以 定义新的属性的方法。
5.3.2 覆盖父类中的方法
• 使用继承的过程中,可以实现方法的重载。在第 五章中曾经介绍过,方法重载实现了对同一个方 法名的复用,只是存在于父类和子类之间。当父 类中的一个方法在它的子类中重新获得定义时, 若该方法的方法名、参数、返回值类型均不变, 只有方法体发生了变化时,就称子类的方法重载 了父类方法。
5.3.4 super关键字的使用
• 当子类继承父类后,若要在子类中直接调用父类 的构造方法,就必须使用super(…)语句,但需要 注意以下两点:
• (1)若要在子类构造方法中调用父类构造方法, super(…)语句必须放在子类构造方法中的第一行;
• (2)不能在子类构造方法中同时调用this(…)和 super(…)语句,因为这两条语句都必须位于子类 构造方法中的第一行。
5.5.2 成员变量在接口中的使用
• 2.接口中成员变量的作用 • 接口相当于一份契约,契约具有的属性应该是不
变的,因此接口内只能放置常量。这样做能够保 证实现该接口的任何类都可以访问相同的常量, 不能动态将其值随意进行修改,同时使用声明的 常量也会增强代码的可读性。
5.5.3 方法在接口中的使用
第5章 Java面向对象编程进阶
5.1 内部类和匿名类
• 在此之前,本书介绍的类中,都只是由属性和方 法构成的,而在实际编程中,一个类的内部也可 以包含一个类,并将这个类称之为内部类。在这 一节中,将介绍Java语言中内部类的概念和用法。 这也是Java程序中比较高级的一种用法,还会用 实际的例子来介绍其使用方法。
- 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 语言规范我也没找到相
关定义。