二级java程序设计--继承,多态,高级类特性和数组

来源:互联网 发布:三体歌者文明 知乎 编辑:程序博客网 时间:2024/05/17 04:18

java的继承,多态,高级类特性和数组

考点分析和学习目的

1.了解Object,String等基本Java类
2.掌握继承和多态的思想及其应用
3.了解内部类及其实现
4.掌握方法覆盖,重载等高级编程方法

5.数组的创建和使用

一.概述
1.Object类:java类库所有类的根类。
有6个方法可以被系统中的每个类继承:
(1)public String toString():常用来输出显示所需要的字符串。
(2)public boolean equals(Object obj):比较两个对象是同一个对象时,返回true。
定义:

public boolean equals(Object obj){return this == obj;}
(3)public int hashCode()
(4)public final Class getClass():获得当前对象所属类信息,返回Class对象。
(5)protected Object clone():对象克隆,返回该复制对象。
(6)protected void finalize() throws Throwable:声明回收当前对象所释放资源。

二.Class类:自引用的数据类型。为了在一个java程序中精确包括一个Class对象,可以在任何数据类型的名称后面跟着.class。
1.Class类具有如下特性:
(1)每个装载到jvm的类都包含一个Class对象。
(2)Class类没有构造方法。
(3)可以将含有包含路径的类名传给静态方法Class.forName()来动态加载类。
例如:使用JDBC-ODBC桥连接数据库时,首先加载JDBC-ODBC桥的驱动程序:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
通过Class类的静态方法forName()可加载sun.jdbc.odbc包中的JdbcOdbcDriver类来建立JDBC-ODBC桥的桥连接器。
(4)该类的newInstance()方法创建了一个指定类的实例。该方式适用于目标类含有一个带参数的构造方法的类。
2.Class类体现了一个java类本身的基本特征,该类既没有构造方法,也没有变量。Class类不能直接生成对象,但是可以通过某些方法获得Class对象:
(1)静态方法:Class.forName(name):参数name是java类库类的路径类名。

Class textFieldC = textFieldC.getClass();//textField是JTextField类的对象
(2)java.lang.Object.getClass()方法。

三.String类:每当java编译器遇到一个用英文双引号括起来的字符串时,它就会自动创建一个String对象。
(1)String,StringBuffer,StringBuilder都是final类,都不能被继承。
(2)差别:String的字符串长度不可变,而StringBuffer,StringBuilder字符串长度都可变。StringBuffer类支持多线程,速度稍慢;而StringBuilder不支持多线程,速度稍快。
1.字符串的表示
(1)字符串常量的表示:

String s = "hello java";
(2)用String类表示字符串:
String s = new String();//生成一个空串
也可通过数组或字节数组来生成一个字符串对象
(3)用StringBuffer表示字符串,有下列构造方法:

StringBuffer();
StringBuffer(int length);
StringBuffer(String str);
2.字符串的访问
String类提供的方法:
(1)获得字符串长度:

String s = "hello";int len  = s.length();//n=5
(2)提取字符串中指定字符:
String s1 = "Hello";char last = s1.charAt(4);
(3)提取字符串中多个字符:
indexOf()和lastIndexOf()方法应用于字符串查询。若查询成功,返回所查找字符的位置;失败则返回-1.
StringBuffer类提供的方法有:length(),charAt(),getChars(),capacity()
public class StringBufferDemo{public static void main(String[] args){StringBuffer sb = new StringBuffer("text");System.out.println("buffer = "+sb);//buffer = textSystem.out.println("length = "+sb.length());//length = 4System.out.println("capacity = "+sb.capacity());//capacity = 20}}
3.字符串的修改,连接和替换
(1)对String的修改,连接和替换:replace(),substring(),toLowerCase()等方法。
//截取字符串:String str = "hello world";String str1 = str.substring(3);//str1 = "lo world";String str2 = str.substring(0,3);//str2 = "hel";str.trim();//返回字符串的副本,忽略前导空格和尾部空格//两个字符串的连接String s1 = "abc";String s1_1 = s1.concat("cde");//替换一个字符串中所有与指定字符相匹配的字符。如将字符串str中所有空格替代为#str.replace(' ','#');
(2)对StringBuffer的修改,连接,替换:包括append(),insert(),SetCharAt()等方法。

4.字符串比较:equals()方法。

二.覆盖方法:当一个方法被定义为final时,是强制禁止覆盖;但当一个方法被定义为abstract时,是强制进行覆盖。
覆盖一个方法时,子类方法可见性不能低于父类方法。如父类方法public,子类方法一定得为public。

三.重载方法:同一个类中定义多个名称相同,但参数不同的方法。返回值不同不算重载。

四.高级类特性
1.static关键字
static表示是一个类的所有对象“共享”的意思,一个类的各个对象可以共享static修饰的变量或方法,不必生成对象,即不用对象引用。
2.final关键字
final关键字用来修饰:
(1)数据:一个永不改变的常量。
(2)方法:不可覆盖的方法。
(3)类:不可被继承的类。
3.枚举类型:一组已命名的数组常量。

public enum Color{RED,GREEN,BLACK,YELLOW}
4.抽象类:抽象类中可以声明方法,称为抽象方法,作为所有子类统一的接口。抽象方法只需要声明而不需要实现,抽象类中也可以没有抽象方法。
static,private和final方法不能是抽象的,因为这些类中的方法是不能被子类覆盖的。
5.接口
主要功能:
(1)不管类的层次,不同的类可以有相同的接口。接口只声明一组方法,但不实现任何方法。
(2)一个类可以实现许多接口,但是只能有同一个父类。
1.声明接口:方法名,参数列表和返回类型。接口中也包含数据成员,但必须默认为static和final的常量。
public interface Constant{public static final int Con_1 = 1;public int Con_2 = 2;}
2.实现接口:接口不能用new来实例化
注意:当用一个类去实现接口时,意味着该类必须实现该接口的所有方法。

3.接口作为类型的使用:接口可以作为引用类型来使用,通过引用类型变量去访问类所实现接口中的方法。

五.内部类

(1)内部类允许一个类声明放入另一个类声明中,利用内部类可将逻辑上同属性的类进行组合,并在一个类中控制另一个类的可视性。
(2)内部类也具有自己的成员变量和成员方法。可以通过建立内部类的对象去访问其成员变量和调用其成员方法。
内部类特点:
(1)内部类的类名只能在它声明的类或程序段中匿名使用,外部使用它时必须给出类的全名;
(2)内部类的类名不允许与包含它的类名相同;
(3)内部类可以使用它所在类的静态成员变量和实例成员变量,也可以使用它所在类的方法中的局部变量;
(4)内部类可用abstract修饰声明为抽象类,也可以用private,protected声明;
(5)内部类可作为其他类的成员,并且可以访问它所在类的成员。

六.数组
1.一维数组的创建,初始化和引用
数组初始化通常有两种方法:
(1)静态初始化

int arr[] = {1,2,3,4,5};
(2)动态初始化
int[] m = new int[10];

2.多维数组的创建,复制和调整大小

int a[][] = {{11,22,33},{44,55}};
java.lang.System.arraycopy()方法可以完成数组的复制:

//System.arraycopy(a,a_pos,b,b_pos,length);/*a:被拷贝数组 a_pos:被拷贝数组要复制的起始位置 b:目的数组 b_pos:目的数组开始放置的起始位置 length:复制的长度*/public class ArrayCopy{public static void main(String[] args){int[] a = {0,1,3,5,6,7};int[] b = {001,002,003,004,005,006,007};System.arraycopy(a,2,b,3,4);for(int i=0;i<b.length;i++){System.out.println(b[i]+" ");}}}/*输出结果:001 002 003 3 5 6 7*/



阅读全文
0 0
原创粉丝点击