Download presentation
Presentation is loading. Please wait.
1
3.9 Java基础类与工具类
2
目录 CONTENTS Object类与Class类 基本数据类型封装类 Math类 System类 Date和Calendar类
3.9.11 Object类与Class类 3.9.4 System类 3.9.3 Math类 基本数据类型封装类 3.9.2 3.9.5 Date和Calendar类 3.9.6 集合框架与泛型编程 *
3
Object类与Class类
4
3.9.1 Object类和Class类 Object类
Object类 是Java程序中所有类的直接或间接父类,也是类库中所有类的父类, 位于java.lang 包中。Object类包含了所有Java类的公共属性,其中的主要方法有: Object类 protected Object clone() 生成当前对象的一个拷贝,并返回这个复制对象。 public boolean equals(Object obj) 比较两个对象是否相同,是则返回true。
5
3.9.1 Object类和Class类 Object类 public final Class getClass()
protected void finalize() 定义回收当前对象时所需要完成的清理工作。 public String toString() 返回当前对象本身的有关信息,按字符串对象返回。
6
3.9.1 Object类和Class类 Class 类
Class 类是java.lang 包中的类,该类的实例可以帮助程序创建其他类的实例或者取得其他类的对象的内部信息。 Class 类 Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,不能像普通类一样以 new 运算符创建,因为这个类没有public构造方法 Class类封装一个对象和接口运行时的状态,每个类都有一个相应的Class对象。
7
3.9.1 Object类和Class类 使用Class类实例化一个对象
方法1——通过Class类对象的forName()+ newInstance ( ) public static Class forName(String className)throws ClassNotFoundException public Object newInstance ( ) throws InstantiationException 例: Class obj= Class.forName(“shapes.Circle“ ); //Circle是shapes包中的类 Circle c1=(Circle)boj. newInstance ( ) ; //通过obj来实例化一个Circle对象 注意:使用Class对象调用newInstance()实例化某一个类的对象时,该类必须有无参构造方法。
8
3.9.1 Object类和Class类 使用Class类实例化一个对象 方法2——使用对象的getClass()方法:
public final Class <?> getClass( ) 例: Circle c1=new Circle( ) ; //创建一个Circle对象c1 Class obj= c1. getClass(); //获取与Circle对象c1相关 的一个Class类对象
9
3.9.1 Object类和Class类 使用Class类的实例获取类的相关信息
任何对象调用getClass()方法都可以获得与该对象相关的一个Class对象。 使用Class类的实例获取类的相关信息 Class对象经常调用的方法: String getName( ) // 返回类的名字 Constructor[] getDeclaredConstructors( ) // 返回类的全部构造方法 Field[] getDeclaredFields( ) // 返回类的全部成员变量 Method[] getDeclaredMethods() // 返回类的全部方法
10
Object类和Class类 Java的反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 主要由以下类来实现Java的反射机制: Class类:代表一个类,位于java.lang包下 Field类:代表类的成员变量(成员变量也称为类的属性) Method类:代表类的方法 Constructor类:代表类的构造方法 Array类:提供了动态创建数组、访问数组的元素的静态方法 位于java.lang.reflect包中
11
基本数据类型封装类
12
3.9.2 基本数据类型封装类 基本数据类型 数据类型封装类 名称 boolean Boolean 逻辑型 char Character
基本数据类型封装类 基本数据类型 数据类型封装类 名称 boolean Boolean 逻辑型 char Character 字符型 double Double 双精度型 float Float 浮点型 int Integer 整型 long Long 长整型
13
3.9.2 基本数据类型封装类 a)最大值和最小值的限定 通过 MAX_VALUE域 和 MIN_VALUE域来设定
Integer 类的使用 public Integer(int value) //通过int数据生成 public Integer(String s) //通过字符串生成 b)生成Integer对象的构造方法 将当前对象所对应的int量转换成其他基本数据类型的量,并返回转换后的值。 public double doubleValue( ); public int intValue( ); public long longValue( ); c)数据类型转换方法
14
3.9.2 基本数据类型封装类 d) 字符串与int量相互转化的方法
基本数据类型封装类 public String toString(), 将当前Integer对象对应的int量转换成字符串; public static int parseInt(String s)是类方法,直接将字符串转化成int量。 例: int i= Integer.parseInt(”345”); public static Integer valueOf(String s)也是类方法,可以将一个字符串转化成一个Integer对象。这个对象对应的int数值与字符串表示的数值一致。 例: int i= Integer. valueOf(”345”).intValue(); 对其他数据类型: float f= Float.valueOf(”345”).floatValue(); float f=Float.parseFloat(“345”); d) 字符串与int量相互转化的方法 Integer类的使用
15
Math类
16
Math类 Math类用来完成一些常用的数学运算, 提供了一些static方法, 使用时用类名做前缀就可以直接使用。如: k=Math.max(9,6); Math类的主要属性和方法: public final static double E; //数学常数e public final static double PI; //圆周率常量π public static double abs(double a); //绝对值 public static double exp(double a); //e的a幂 public static double floor(double a); //不大于a的最大整数 public static double log(double a); //自然对数
17
3.9.3 Math类 public static double sqrt(double a); //开平方
public static double random(); //产生0到1之间的随机数 public static double pow(double a, double b ); //乘方 public static double rint(double a); //四舍五入 public static double IEEEremainder(double a, double b); // 求余数 (取模运算) public static float min(float a, float b); //求最小值 public static double max(double a, double b); //求最大值
18
Math类 Math类使用示例
19
System类
20
3.9.4 System类 (1) 用System类获取标准输入/输出 public static InputStream in
public static PrintStream out b) 标准输出 public static PrintStream err c) 标准错误
21
System类 System类使用示例
22
3.9.4 System类 (2) 用System类的方法获取系统信息及完成系统操作 System的操作
public static long currentTimeMillis( ) 获取自1970年1月1日零时至当前系统时刻的微秒数,通常用来比较两事件发生的先后时间差。 System的操作 public static void exit (int status) 在程序的用户线程执行完之前,强制java虚拟机退出运行状态,并把状态信息status返回给虚拟机的操作系统,如:System.exit(0);//非0为不正常退出 Public static void gc( ) 强制调用Java虚拟机的垃圾回收功能,收集内存中丢失的垃圾对象所占用的空间,使其可以被重新加以利用。
23
3.9.5 Date和Calendar类
24
3.9.5 Date和Calendar类 (1) Date(时间)类
可以使用 DateFormat 的子类 SimpleDateFormat 来实现日期的格式化输出, 其构造方法是: public SimpleDateFormat(String pattern) 该构造方法可以用参数 pattern 指定的格式创建一个对象,该对象调用format(Date date) 方法来格式化时间对象date。 系统中计算机的起始时间: 公元1970年1月1日0时(格林威治时间) 如果是北京时间为 公元1970年1月1日8时。
25
3.9.5 Date和Calendar类 Pattern中可以有的元字符 表示的内容 格式 年 y yy yyyy 月 M MM 日 d
dd 时 H HH 分 m mm 秒 s ss 星期 E 用系统当前时间创建日期对象的方法:Date nowTime=new Date( )
26
Date和Calendar类 Date类使用示例
27
3.9.5 Date和Calendar类 (2) Calendar(日历)类
使用Calendar类的static方法 getInstance( ) 可以初始化一个日历对象: Calendar myCalendar= Calendar. getInstance( ); Calendar对象可以调用方法来设置时间: public final void set(int year, int month, int date) public final void set(int year, int month, int date, int hour, int minute) public final void set(int year, int month, int date, int hour,int minute,int second)
28
Date和Calendar类 Calendar(日历)类使用示例
29
集合框架与泛型编程
30
集合框架与泛型编程* (1) 集合框架 在JDK1.2之后,Java提供了实现常见数据结构的类,这些实现数据结构的类通称为Java集合框架。 例如: 链表类: LinkedList 顺序表类:ArrayList 堆栈类:Stack<E> 树集类: TreeSet<E> 散列映射(哈希表):HashMap<K,V> JDK1.5 之后有了泛型链表类: LinkedList <E> 优点: 使用泛型类建立的数据结构时,不必进行强制类型转换
31
集合框架与泛型编程* (2) 泛型编程 泛型(Generics):是在JDK1.5中推出的,目的是可以建立具有类型安全的集合框架。 在引入范型之前,Java数据类型分为基本数据类型、复合数据类型,其中复合类型分为数组和类。 引入范型后,一个复合类型就可以在细分成更多的类型。 例如: 原先的类型List,现在在细分成List<Object>, List<String>等更多的类型。
32
集合框架与泛型编程* 在引入泛型之前,要在类的方法中支持多个数据类型,就需要对方法进行重载;在引入泛型后,可以很方便的解决此问题(多态)。 例如: public void write(Integer i, Integer[] ia); public void write(Double d, Double[] da); 其范型版本为: public <T> void write(T t, T[] ta);
33
3.9.6 集合框架与泛型编程* 泛型类的定义格式: class 名称<泛型列表>{ …… // 类体 }
集合框架与泛型编程* 泛型类的定义格式: class 名称<泛型列表>{ …… // 类体 } 可以是任何对象或接口, 但不可以是基本数据类型 泛型类的类体定义与普通类的类体完全类似。
34
集合框架与泛型编程* 泛型编程示例——计算不同底的锥形体积
35
附加:Java的向量* 向量的概念 01 向量(Vector)是 java.util 包提供的一个用来实现不同类型元素共存的变长数组的工具类功能强大。 Vector类的对象(不能是简单数据类型)不但可以保存顺序的一列数据,而且还封装了许多有用的方法来操作和处理这些数据,比数组功能强大。
36
1 2 3 4 5 Java的向量* 适合用Vector类的情况: 需要处理的对象数目不定,序列中的元素都是对象,或可以表示为对象
单击此处添加段落文字内容 需要处理的对象数目不定,序列中的元素都是对象,或可以表示为对象 1 需要将不同类的对象组合成一个数据系列 2 需要做频繁的对象序列中元素的插入和删除 3 经常需要定位序列中的对象或其他查找操作 4 在不同类之间传递大量的数据 5
37
Java的向量* 创建向量类的对象 Vector类有三个构造方法,最复杂的是:
02 Vector类有三个构造方法,最复杂的是: public Vector(int initCapacity,int capacityIncrement); initCapacity: 表示刚创建时Vector序列包含的元素个数 capacityIncrement: 表示每次向Vector中追加元素时的增量 例: Vector myVector = new Vector(10,5) 表示创建的myVector 向量序列初始有10个元素,以后不够用时,按5为单位递增。创建时不需要指明元素类型,使用时再确定。
38
Java的向量* 向向量序列中添加元素 方法1:用addElement()方法将新元素添加在向量序列的尾部
03 方法1:用addElement()方法将新元素添加在向量序列的尾部 格式: addElement(Object obj); 方法2:用insertElement()方法将新元素插入在向量序列的指定位置处 格式:insertElement(Object obj, int index); 其中index为插入位置,0表示第1个位置。
39
Java的向量* 向向量序列中添加元素 例: Vector myVector=new Vector( );
03 例: Vector myVector=new Vector( ); for ( int i=0; i<10;i++) { myVector. addElement( new Student( i, )); } myVector. insertElement(new Student( ,666666),0);
40
1 2 3 4 Java的向量* 修改或删除向量序列中的元素
04 void setElementAt(Object obj, int index) 1 4 2 3 将向量序列index位置处的对象元素设置成为obj,如果此位置原来有元素则被覆盖。 boolean removeElement (Object obj) 删除向量序列中第一个与指定的obj对象相同的元素,同时将后面的元素前移。 void removeElementAt(int index) 删除index指定位置处的元素,同时将后面的元素前移。 void removeAllElements() 清除向量序列中的所有元素。
41
1 2 3 4 Java的向量* 查找向量序列中的元素 Object elementAt(int index)
05 Object elementAt(int index) 1 4 2 3 返回指定位置处的元素。通常需要进行强制类型转换。 boolean contains (Object obj) 检查向量序列中是否包含与指定的obj对象相同的元素,是则返回true,否则返回false。 int indexOf(Object obj,int start_index) 从指定的start_ index位置开始向后搜索,返回所找到的第一个与指定对象相同元素的下标位置,若指定对象不存在则返回-1。 int lastindexOf(Object obj,int start_index) 从指定的start_ index位置开始向前搜索,返回所找到的第一个与指定对象相同元素的下标位置,若指定对象不存在则返回-1。
42
集合框架与泛型编程* 向量使用示例
43
谢谢观看!
Similar presentations