您的位置:首页 > 编程语言 > Java开发

我的Java基础的学习笔记

2011-10-22 00:10 267 查看
setAccessory

public void setAccessory(JComponent newAccessory)设置 accessory 组件。accessory 通常用于显示已选中文件的预览图像;可按程序员的要求将其用来显示任何内容,如额外的自定义文件选择器控件。

注:如果有以前使用的 accessory,则应该取消注册该 accessory 已向文件选择器所注册的所有侦听器。

SwingUtilities:

public class SwingUtilities extends Objectimplements

SwingConstantsSwing 实用方法的集合。

JMenu:

public class JMenuextends JMenuItemimplements Accessible, MenuElement菜单的该实现是一个包含 JMenuItem 的弹出窗口,用户选择 JMenuBar 上的项时会显示该 JMenuItem。除 JMenuItem 之外,JMenu 还可以包含 JSeparator。

JList:

public class JList extends JComponentimplements Scrollable, Accessible显示对象列表并且允许用户选择一个或多个项的组件。

JMenuBar:

菜单栏的实现

Clipboard :

此类实现一种使用剪切/复制/粘贴操作传输数据的机制。

JscrollPane:

提供轻量级组件的 scrollable 视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口.

Action:

Action 接口提供 ActionListener 接口的一个有用扩展,以便若干控件访问相同的功能。

validate

public void validate()验证此容器及其所有子组件。

使用 validate 方法会使容器再次布置其子组件。已经显示容器后,在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。

如果此 Container 无效,则此方法将调用 validateTree 方法,并将此 Container 标记为有效。否则不执行任何动作。

setSelectionEnd

public void setSelectionEnd(int selectionEnd)将选择结束点设置为指定的位置。新的结束点限制在当前选定开始位置处或之后。

这可用于在 java.awt.TextComponent 上调用此方法的代码向后兼容。实现此方法以转发 Caret 实现,后者是维护实际选定的位置。

参数:

selectionEnd - 文本的结束位置,该值 >= 0

repaint

public void repaint()重绘此组件。

如果此组件是轻量级组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的 update 方法。

注:有关 AWT 和 Swing 所用绘制机制的更多信息,包括如何编写最高效的绘制代码的信息,请参阅 Painting in AWT and Swing。

JCheckBoxMenuItem:

可以被选定或取消选定的菜单项

public interface ListSelectionModel此接口表示任何组件的当前选择状态,该组件显示一个具有稳定索引的值列表。该选择被建模为一组区间,每个区间表示一个选定列表元素的连续范围。修改该组选定区间的方法都采用一对索引:index0 和 index1,这对索引表示一个闭区间,即该区间同时包括 index0 和 index1。

path 路径,是java编译时需要调用的程序(如java,javac等)所在的地方

classpath 类的路径,在编译运行java程序时,如果有调用到其他类的时候,在classpath中寻找需要的类。

public class EOFExceptionextends IOException当输入过程中意外到达文件或流的末尾时,抛出此异常。

此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。

1. final关键字

在Java中, 可以使用final关键字修饰类、方法以及成员变量。

(1).final标记的类不能被继承;

(2).final标记的方法不能被子类复写;

(3).final标记的变量即成为常量,只能被赋值一次.

注意: 如果使用final来声明常量,请遵守以下常规: final标记的变量名,所有单词字母都需大写.

--------------------------------------------------------------------------------

2. 抽象类

讲抽象类的定义必须先讲抽象方法的定义. 所谓抽象方法,是指只声明而未实现(即没有{}包围的方法体)的方法. 而含有一个或多个抽象方法的类就称为抽象类.

抽象类 = 普通类 + 抽象方法

对于抽象类,时刻需要谨记: 抽象类是不能够直接实例化的, 如果要使用一个抽象类,就必须要有该抽象类的子类. 如果抽象类的子类不是抽象类的话,就一定要复写该抽象类的所有抽象方法.

抽象类中允许有自己的构造方法,但是该构造方法并不能直接实例化自己的对象. 如果在抽象类中存在有参构造方法,则必须在子类中明确的使用super([参数列表])指明要调用父类中的哪个构造方法.

3.1 接口的概念

接口是抽象方法与常量的结合.

接口的定义方式为: interface 接口名 { 数据类型 常量名 = 常量值; 返回值类型 方法名(); .......}

在Java中,一个类只能继承一个类,但是却可以实现(implements)多个接口. 如果实现接口的类不是抽象类的话,则该子类必须复写接口中所有的抽象方法.

一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法

3.2 接口的两点注意之处

(1). 抽象类使的是extends关键字,表示一个类只能继承一个父类,但是接口使用的是implements,一个类可以同时实现多个接口,但是此时子类就必须同时覆写好多个接口中的抽象方法。

(2). 既然定义中已经明确说明了接口是抽象方法和全局变量的集合,因此,我们可以如下例一样,对代码进行简化: view plaincopy to clipboardprint

一个接口可以使用extends关键字去继承一个或多个已有的接口,但在子类的实现时,也必须全部实现所有接口的抽象方法.

也可以将此类定义为抽象类

.相同点

A. 两者都是抽象类,都不能实例化。

B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点

A. interface需要实现,要用implements,而abstract class需要继承,要用extends。

B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。

C. interface强调特定功能的实现,而abstract class强调所属关系。

D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

这个选择有两点含义:

一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。

二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

E. abstract class是interface与Class的中介。

interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。

abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

1、在类第一次加载时候,会执行静态域(field)初始化语句和静态块(用static{}包含的部分)。

这里要注意:

a、不管静态域声明语句的实际位置在哪儿,当第一次加载类的时候都会首先对它初始化为缺省值(0,false,null等)。

b、即使静态域声明中使用了显式初始化语句(比如:int x=3),第一次加载类的时候也会先把它初始化为缺省值(此时x为0),然后再按照下面说的要点c来执行赋值语句(x=3)。

c、对于静态域的显式初始化语句和静态块,按照在类中代码出现的先后顺序执行。

11.final, finally, finalize的区别?

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

(final具有“不可改变的”的含义,他可以修饰非抽象类,非抽象成员方法和变量。用final修饰的类,不可继承,没有子类。用final修饰的方法,不能被子类的方法覆盖。用final修饰的变量表示常量,只能被赋一次值。)

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

43. Class.forName的作用?为什么要用?

答:调用该方法返回一个以字符串指定类名的类的对象。

Class.forName(xxx.xx.xx) 返回的是一个类

首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。

至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。

A a = (A)Class.forName("pacage.A").newInstance();

这和你

A a = new A();

是一样的效果。

覆盖:

什么是方法覆盖

如果在子类中定义的一个方法,其名称、返回类型及参数签名正好与父类中某

个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父

类的方法。

覆盖方法必须满足的十大约束

一:子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和

返回类型一致

二:子类方法不能缩小父类方法的访问权限

三:子类方法不能抛出比父类方法更多的异常,子类方法抛出的异常必须和父类

方法抛出的异常相同,或者子类方法抛出的异常类是父类方法抛出的异常类的子



四:方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个

类中方法只能被重载,不能被覆盖。(哈哈,这个是方法覆盖的定义吧)。

五:父类的静态方法不能被子类覆盖为非静态方法。

六:子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的

静态方法。子类隐藏父类的静态方法和子类覆盖父类的实例方法,这两者的区别

在于:运行时,Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的

实例绑定。

* 父类的非静态方法不能被子类覆盖为静态方法

  * 父类的私有方法不能被子类覆盖

  * 父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)(P169)

  * 父类的非抽象方法可以被覆盖为抽象方法

静态内部类对象有着指向其外部类对象的引用,它可以访问创建它的外部类对象的内容,甚至包括私有变量!

非静态内部类不能声明本类的static成员 ,只有一个静态的内部类,才可以声明一个static成员,

非静态内部类非静态方法中:可以直接访问该类的非静态成员、外部类内中的静态和非静态的成员;访问静态内部类和非静态内部类的成员的方法一样。

静态成员类特性

静态内部类没有了指向外部的引用。

静态内部类中可以定义任何静态和非静态的成员

静态内部类里的静态方法中:可以直接访问该类和外部类中的静态成员,访问该类和外部类中成员通过创建对象访问

静态内部类里的非静态方法中:可以直接访问该类中的所有的非静态、静态成员和直接访问外部类中的静态成员;访问外部类中成员通过创建类对象访问

像静态方法或静态字段一样,静态成员类有public/private/default权限修饰符

静态成员类约束

静态成员类不能与外部类重名

像外部类的静态方法一样,不能直接访问外部类的实例字段和实例方法

静态成员类只能定义于外部类的顶层代码或外部类其它静态成员类的顶层代码中(嵌套定义);不能定义于外部类的某个函数中。

局部内部类

如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部,就可以创建一个局部内部类并返回。局部内部类的访问域是受限的。

匿名内部类

也就是没有名字。可以这样使用。

在java的事件处理的匿名适配器中,匿名内部类被大量的使用。

匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:

1.如果是在一个方法的匿名内部类,可以利用这个方法传进你想要的参数,不过记住,这些参数必须被声明为final。

2.将匿名内部类改造成有名字的局部内部类,这样它就可以拥有构造函数了。

3.在这个匿名内部类中使用初始化代码块。

97. 子类覆盖父类总结:

A. 子类方法的名称、参数名和返回类型必须与父类方法的名称、参数名和返回类型一致。

B. 子类方法不能缩小父类方法的访问权限。

C. 子类方法不能抛出比父类方法更多的异常,子类方法抛出的异常必须和父类方法抛出的异常相同或者是在方法抛出的异常类的子类。

D. 方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不是覆盖。

E. 父类的静态方法不能被子类覆盖为非静态方法。

F. 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。

G. 父类的非静态方法不能被子类覆盖为静态方法。

H. 父类的私有方法不能被子类覆盖。

I. 父类的抽象方法可以被子类通过两种途径覆盖:一种是子类实现父类的抽象方法;另一种是子类重新声明父类的抽象方法,这种方法通常用来扩大该方法的访问权限。

J. 父类的非抽象方法可以被覆盖为抽象方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: