第第第 Java 第第第第第 Java 第第第第第第
Jan 25, 2016
第八讲 Java 常用类简介
Java 程序设计基础
主要内容: Object Math String 和 StringBuffer Vector Random StringTokenizer 与各基本数据类型相对应的类
类的介绍 /Object
Object 类是 Java 中所有类的超类,在 java 类的继承关系图上处于根部 (root) ,所有 class 的对象 ( 包括数组对象 ) 都继承了 Object 的方法
Object 有一个构造方法和 11 个成员方法 ( 见下页 )其中最常用的是 public boolean equals(Object obj)和 public String toString()
第一个方法用来比较两个对象是不是相等,第二个方法常常被重写以输出一个有意义的字符串
类的介绍 /ObjectObject() 构造方法clone() 克隆一个对象equals(Object obj) 判断本对象与 obj 是否相等finalize() 被垃圾收集器调用getClass() 返回对象的 classhashCode() 返回对象的 hash code 值notify() 叫醒一个正在等待的线程notifyAll() 叫醒所有正在等待的线程toString() 返回代表这个对象的字符串wait() 让本线程进入等待wait(long timeout) 让本线程进入等待wait(long timeout, int nanos) 让本线程进入等待
class A{public String toString(){
return "A is for ObjectTest class";}
}public class ObjectTest { public static void main(String[] s){ A a1 = new A(); A a2 = new A(); A a3 = a1;
System.out.println("a1.equals(a1) is " + a1.equals(a1));
System.out.println("a1.equals(a2) is " + a1.equals(a2));
System.out.println("a1.equals(a3) is " + a1.equals(a3));
System.out.println(a1.toString());System.out.println("a1 is a instance of class "
+ a1.getClass().getName());}
}
类的介绍 /Object重写了 toString() 方法
继承了 equals() 等方法
a1.equals(a1) is truea1.equals(a2) is falsea1.equals(a3) is trueA is for ObjectTest classa1 is a instance of class A
类的介绍 /MathMath 类里给出了数学计算所需要的函数,包括:
这些都是静态 (static) 的方法,用 Math.XXX() 直接调用
另外它还提供了两个常数 e 和 π
Math.E, Math.PI
绝对值 abs(a) 这里 a 可以是 int,long,float 和 double
三角函数 sin(a) 、 cos(a) 、 tan(a) 等乘方 pow(a,b) a 的 b 次方自然对数 log(a) 以 e 为底的对数开方 sqrt(a) 求 a 的平方根随机数 random() [0.0, 1.0) 不小于 0.0 小于 1.0 的数
public class MathTest{ public static void main(String[] s){ System.out.println("sin(π/4) is " + Math.sin(Math.PI/4.0)); System.out.println("2 的 4 次方是 " + Math.pow(2,4)); System.out.println(" 以 e 为底的 e 的对数是 " + Math.log(Math.E)); System.out.println("81 的平方根是 " + Math.sqrt(81)); }}
类的介绍 /Math(1)
sin(π/4) is 0.70710678118654752 的 4 次方是 16.0以 e 为底的 e 的对数是 1.081 的平方根是 9.0
import java.awt.*;import java.awt.event.*;
class RandomFrame extends Frame implements ActionListener{ RandomFrame(){
this("RandomFrame"); } RandomFrame(String title){
super(title);add(pane = new Panel());setPane();pack();Dimension dm = getSize();Dimension ss = getToolkit().getScreenSize();setCenter(ss, dm); 转下页
类的介绍 /Math(2)random() 方法的演示程序
接上页addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) {
dispose();System.exit(0);
}});
} // 构造方法结束
private void setCenter(Dimension screen, Dimension frame){ int x = screen.width/2 - frame.width/2;
int y = screen.height/2 - frame.height/2; setLocation(x,y);} 转下页
类的介绍 /Math(2*)random() 方法的演示程序
接上页 private void setPane(){
tfd = new TextField(20);tfd.setFont(new Font("Tahoma", Font.BOLD, 16));pane.add(tfd);btn = new Button("RandomNumber Generator");btn.addActionListener(this);pane.add(btn);
} public void actionPerformed(ActionEvent ae){
Button b = (Button)ae.getSource();if(b == btn){
String s = Double.toString(Math.random());tfd.setText(s);
} } 转下页
类的介绍 /Math(2**)random() 方法的演示程序
接上页
private Button btn;private TextField tfd;private Panel pane;
} //RandomFrame class 结束
public class MathTest2{public static void main(String[] s){
RandomFrame rf = new RandomFrame();rf.show();
}}
类的介绍 /Math(2***)random() 方法的演示程序
12
字符串在 Java 中是一个特殊的类 String, 它是一个 final class. 因此不能被继承
String 被 Java 的开发者构造得非常接近基本数据类型,换句话说,在很多时候可以象使用基本数据类型一样来使用 String 类
类的介绍 /String
13
Constructor 说明
String() 生成一个空字符串
String(char[] chars) 从一个字符数组生成一个字符串
String(char[] chars, int offset, int count)
从一个字符数组的第 offset个位置开始取 count 个字符生成一个字符串
类的介绍 /String
14
声明了一个空字符串 s的方式String s;String s = new String();
创建一个字符串的方式String ss = “创建了一个字符串” ;String ss =
new String(“创建了一个字符串” );
类的介绍 /String类的声明
15
声明一个字符串数组String[] sa = new String[]{“创建了一个字符串” , “数组” };
String[] sa2;Sa2 = new String[3];Sa2[0] = “第一个元素” ;Sa2[1] = “第二个元素” ;Sa2[2] = “第三个元素” ;
类的介绍 /String
16
String 的主要方法 说明int length() 字符串中字符的个数char charAt(int index) 返回位于 index 处的字
符void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
拷贝字符数 = srcEnd-srcBegin从 dst 的 dstBegin 位置开始放
类的介绍 /StringString 的成员方法:
17
String 的主要方法 说明int indexOf(int ch) 返回第一个 ch字符的位置int indexOf(String s) 返回第一个子串 s的位置boolean equals(Object str) 将当前字符串与 str 比较boolean equalsIgnoreCase(String s)
当前字符串与 s进行比较 ,忽略大小写
类的介绍 /StringString 的成员方法:
18
String 的主要方法 说明int compareTo(String s) 当前字符串大 /长时返
回大于 0的值String subString(int beginIndex) 取从 beginIndex 到尾的
子串String subString(int bIdx, int eIdx)
取从 bIdx 到 eIdx 的子串
String 的成员方法:
类的介绍 /String
19
String 的主要方法 说明String concat(String s) 将 s接在当前字符串的尾部 ,
等于运算符 +String toLowerCase() 获得小写字母版本 *String toUpperCase() 获得大写字母版本 *String replace(char oldCh, char newCh)
用 newCh 替换 oldCh
String 的成员方法:
类的介绍 /String
20
String 的主要方法 说明String trim() 去掉两端的空格String valueOf(…) **boolean startWith(String s) 查当前字符串是否以字
串 s开始boolean endtWith(String s) 查当前字符串是否以字
串 s结束
String 的成员方法:
类的介绍 /String
21
StringBuffer 类的构造函数StringBuffer();
返回一个空串 ,长度为 16个字节
StringBuffer(int length);返回一个空串 ,长度为 length 个字节
StringBuffer(String s);返回一个字符串 ,初始化为 s,长度为 s.length() + 16 个
字节
类的介绍 /StringBuffer
22
StringBuffer 类中常用的方法StringBuffer append(…);
// 共有 11 个 append 方法StringBuffer insert(…);
// 共有 10 个 insert 方法int length(); // 长度int capacity(); // 容量
类的介绍 /StringBuffer
23
StringBuffer 类中常用的方法String toString();StringBuffer reverse(); //反转字符串StringBuffer replace(int start,int end,String s);String substring(int start);String substring(int start,int end);
类的介绍 /StringBuffer
StringBuffer /append, replace, reverse
/*public StringBuffer append(…); */public class StringBufferDemo { public static void main(String[] args) { String s = new String(“This is A String”); StringBuffer sb = new StringBuffer(s); sb.replace(8,16,”a StringBuffer”); //>=s.length() sb.append(“Demo.”); System.out.println(sb.toString()); //more append int len = sb.length(); sb.reverse().append(‘\n’).append(“the length of sb = ”) .append(len).append(‘,’).append(true).append(‘!’); System.out.println(sb.toString()); }}
This is a StringBufferDemo..omeDreffuBgnirtS a si sihTthe length of sb = 27,true!
StringBuffer / insert, delete
/*public StringBuffer insert(…); */public class StringBufferDemo2 { public static void main(String[] args) { String s = new String(“This is A String”); StringBuffer sb = new StringBuffer(s); sb.deleteCharAt(8); //删除字母 A sb.insert(8, ‘a’); //插入一个字符 int ver = 2; sb.insert(sb.length(),“BufferDemo”) //插入一个字符串 .insert(sb.length(),ver); //插入一个整型数 System.out.println(sb.toString()); }}
This is a
StringBufferDemo2
StringBuffer /capacity
/*public int capacity(); 的应用 */public class StringBufferDemo3 { public static void main(String[] args) { StringBuffer sb = new StringBuffer(“StringBufferDemo3”); System.out.println(“字符串长” + sb.length()); System.out.println(“Buffer 容量” + sb.capacity());//+16 }}
字符串长 17Buffer 容量 33
StringBuffer
/* public String substring(int start);
public String substring(int start,int end); */public class StringBufferDemo4 { public static void main(String[] args) { StringBuffer sb = new StringBuffer("This is a String"); String s1 = sb.substring(8); String s2 = sb.substring(5, 11); System.out.println(s1 + ‘ ‘ + s2); }}
为什么要有两个字符串类1. 如果创建一个字符串,不打算修改它,用 String2. 如果创建一个字符串,计划修改它,用 StringBuffer3. String 比 StringBuffer 执行效率高4. StringBuffer 比 String 方便
类的介绍 /StringBuffer
index, offset, 字符在字符串中的位置
0 1 2 3 4 5 6 7 8 9 10
11
12
13
14
15
16
17
18
19
T h i s a S t r i n g B u f f e r .
substring(7,13
)startindex = 7
offset = 8
endindex = 13
类的介绍 /StringBuffer
向量 (Vector) 是 java.util 包提供的一个工具类。它以类似数组的方式顺序地存储数据,但是具有比数组更强大的功能
Vector 类允许不同类型元素共存
Vector 对象中元素的个数是可变的 (变长数组 )Vector 类封装了许多有用的方法来操作和处理这些数据
类的介绍 /Vector
向量 (Vector) 数组Java 的类 是 不是内存申请 可动态申请 一次性申请有序结构 是 是元素个数 可变 不可变元素类型 只能是对象、不能
是简单数据类型可以是对象、也可以是简单数据类型
元素类型限制 无 类型必须相同
类的介绍 /Vector
向量 (Vector) 的构造函数:public Vector();public Vector(Collection c);public Vector(int capacity);public Vector(int capacity, int increment);
类的介绍 /Vector
这最后一个构造方法有两个形式参数: capacity表示刚创建时 Vector 序列能包含的元素个数 ,increment表示如果需要向 Vector 序列中追加元素 ,那么一次追加多少个 .
下面的语句利用第四个构造函数创建了一个向量序列:Vector MyVector =
new Vector( 100, 50 );
现版本 Java 的 Vector 类共有 42 个方法 ,常用方法如下:void addElement(Object o); 在 Vector 的尾部加一个元
素Object firstElement(); 返回第一个元素 (index =
0)Object lastElement(); 返回最后一个元素Object get(int index); 返回 index 处的元素
类的介绍 /Vector
int indexOf(Object o); 查找元素 o,返回第一个 o的位置
void insertElementAt(Object o, int idx); 在 idx 处插入元素o
void removeAllElements(); 删除对象中的所有元素boolean removeElement(Object o); 删除第一个遇到的 o
void removeElementAt(int index); 删除 index 处的元素int size(); 返回 Vector 对象中元素的个数boolean isEmpty(); 检查这个 Vector 是否为空void setElementAt(Object o, int idx); 用 o置换 idx 处
的元素
类的介绍 /Vector
import java.util.*;public class VectorDemo extends Vector{
public VectorDemo(){ super(1,1); }public void addInt(int i){
addElement(new Integer(i)); }public void addFloat(float f){
addElement(new Float(f));}public void addString(String s){
addElement(s);}public void addCharArray(char a[]){
addElement(a);}
类的介绍 /Vector
public void printVector(){Object o;int length = size();System.out.println("Number of vector elemen
ts is "+length+" and they are:");for (int i = 0; i < length; i++){
o = elementAt(i);if (o instanceof char[]){ System.o
ut.println(String.copyValueOf((char[])o));}else
System.out.println(o.toString());}
}
类的介绍 /Vector
public static void main (String args[]){VectorDemo v = new VectorDemo();int digit = 5;float real = 3.14f;char letters[] = {'a','b','c','d'};String s = new String ("Hi there!");v.addInt(digit);v.addFloat(real);v.addString(s);v.addCharArray(letters);v.printVector();
}}
Number of vector elements is 4 and they are:
5
3.14
Hi there!
abcd
类的介绍 /Vector
类的介绍 /Random该类继承自 Object ,在 java.util 包中。构造方法:
public Random();
类的介绍 /Random成员方法:
public void nextBytes(byte[] bytes)
生成随即字节数据的字节数组
public int nextInt() 生成 int 类型所表示的范围中的随机数
public int nextInt(int n) 生成 0-n( 不含 n) 的随机数public long nextLont() 生成在 long 类型所表示的范
围中的随机数public float nextFloat() 生成 0.0f-1.0f( 不含 )之间
的随机 float 数public double nextDouble() 生成 0.0-1.0( 不含 )之间的
随机 double 数
例: RandomNumber.java
类的介绍 /StringTokenizerStringTokenizer 类继承自 Object 类,用来为字符串构造一个分析器,该类在 java.util 包中。
构造方法:
public StringTokenizer(String str)
说明:为字符串 str 构造一个分析器,使用默认的分隔符集合
public StringTokenizer(String str, String delim)
说明:为字符串 str 构造一个分析器,字符串参数 delim 中的所有字符都作为分隔符
类的介绍 /StringTokenizer构造方法:
public StringTokenizer(String str, String delim, boolean returnTokens)
说明:为字符串 str 构造一个分析器,字符串参数 delim 中的所有字符都作为分隔符;
如果 returnTokens 为真,则把分隔符也作为子串返回;
如果 returnTokens 为假,只返回被分隔符隔开的子串。
类的介绍 /StringTokenizer常用方法:
public boolean hasMoreTokens()——测试一个字符串分析器中是否有被分隔符隔开的子串可得到,如果有返回 true ,否则返回 false。
public boolean hasMoreElements()—— 与上面方法相同
public String nextTokens()—— 返回一个字符串分析器中被分隔符隔开的子串(非分隔符)。
public Object nextElement()——同 nextTokens() 方法。
public int countTokens()—— 返回一个字符串分析器中方法 nextTokens() 能被调用的次数,即有多少个不是分隔符的子串。
例: TestStringToken.java
Java 的基本数据类型 ,如 int,double,char,long 等。利用这些基本数据类型来定义简单的变量和属性十分方便 ,但是如果需要完成一些基本数据类型量的变换和操作 , 比如要把一个字符串转化为整数或浮点数 ,或者反过来要将一个数字转换成字符串 ,就需要使用数据类型类的相应方法
类的介绍 / 数据类型类
数据类型类与基本数据类型密切相关 ,每一个数据类型类都对应了一个基本数据类型 ,它的名字也与这个基本数据类型的名字相似 . 不同的是数据类型类是一个类 ,有自己的方法 ,这些方法主要用来操作和处理它所对应的基本数据类型量
数据类型类与它所对应的基本数据类型
数据类型类 基本数据类型Boolean boolean
Byte byte
Character char
Double double
Float float
Integer intLong long
Short short
类的介绍 / 数据类型类
下面就以 Integer 类为例,介绍该类方法的使用,其它数据类型类中的方法与 Integer 类中的方法相近
类的介绍 / 数据类型类
Integer 类定义了 MAX-VALUE 和 MIN-VALUE 两个属性这两个静态属性返回 int,规定了 int 的最大值 231 –1 和 int 的最小值 -231
Integer 类有两个构造函数
public Integer(int value)用基本数据类型 int 生成一个 Integer 对象
public Integer(String s)用一个字符串来生成一个 Integer 对象
类的介绍 / 数据类型类
Integer 类有 24方法,其中使用较多的有:
public byte byteValue();public double doubleValue();public int intValue();public long longValue();
这些方法把 Integer 类的对象所对应的 int 值转换成其它基本数据类型的值
类的介绍 / 数据类型类
public String toString();将当前 Integer 对象的 int 量转化成字符串
public static int parseInt(String s);public static Integer valueOf(String s);
静态方法 ,无须创建 Integer 对象 ,就可以方便地将字符串转化成一个基本数据类型 int 的量或者一个 Integer 类的对象
类的介绍 / 数据类型类
如 Double、 Float、 Byte、 Short、 Long 等也都具有这些方法,public byte byteValue();public double doubleValue();public int intValue();public long longValue();可以把这些类的对象所对应的值转换成其它基本数据类型的值
类的介绍 / 数据类型类
public String toString();将当前对象对应的量转化成字符串
public static xxxx parseXXXX(String s);public static XXXX valueOf(String s);静态方法,无须创建对象,就可以方便地将字符串转化成一个相应的基本数据类型的量或者一个相应的数据类型类的对象
其中 :xxxx表示一个基本数据类型XXXX 表示一个与基本数据类相应的类
类的介绍 / 数据类型类