第 5 章 常用类的使用 伍孝金 Email:wxj@jcut.edu.cn
第 5 章 常用类的使用 授 课 大 纲 5.1 Java类库的结构 5.2 java.lang包中的常用类 5.3 有关日期时间的类
5.1 Java类库的结构 Java类库是什么? Java类库是指Java API文档,API,英文全称为Application Programming Interface,中文是应用程序编程接口,是系统提供的已实现的标准类的集合,有点类似于C语言所提供的函授库。 Java学习者和开发人员可以通过这个类库来了解和学习某个类和接口,比如类和接口的用途、继承关系、类的属性、构造方法和方法,然后在自己的程序中熟练使用这些类和接口,这样能大大提高编程效率。
5.1 Java类库的结构 Java类库是什么? Java类库中的类和接口大多封装在特定的包里,每个包具有自己的功能。下面的表中列出了Java一些常用的包及其功能的描述。其中,包名后面带“. *”的表示其中包括一些相关的包。 提示:在使用Java时,除了java.lang包外,其它的包都需要import语句引入之后才能使用。
5.1 Java类库的结构:常用类库 包名 主要功能 java.applet 提供了创建applet需要的所有类 java.awt.* 提供了创建用户界面以及绘制和管理图形、图像的类 java.io 提供了通过数据流、对象序列以及文件系统实现的系统输入、输出 java.lang Java编程语言的基本类库 java.math.* 提供了简明的整数算术以及十进制算术的基本函数 java.net 提供了用于实现网络通讯应用的所有类 java.sql 提供了访问和处理来自于Java标准数据源数据的类 java.text 包括以一种独立于自然语言的方式处理文本、日期、数字和消息的类和接口 java.util 包括集合类、时间处理模式、日期时间工具等各类常用工具包 javax.swing.* 提供了一系列轻量级的用户界面组件,是目前Java用户界面常用的包
5.1 Java类库的结构 类库在哪里?如何使用? (1)在线查看,网址:http://docs.oracle.com/javase/8/docs/api/ (2)下载到本地,下载地址:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html (3)也可以在老师的课程网站“书籍与资料”下载。 提示:有兴趣研究这些类源代码的同学,可以在JDK的安装目录下\jdk1.8.0\src.zip的文件找到。
5.1 Java类库的结构 类库在哪里?如何使用? Java类库中包括几千个类,方法的数量之多更是惊人,要想记住所有的类和方法几乎是不可能的事情,因此,学会使用Java类库就显得十分重要。 Java类库或Java API文档是JDK的一部分,它是以HTML格式文件格式保存的,用浏览器打开Java API存放目录下的/docs/api/index.html文件,就可看到如下图所示的界面。
5.2 java.lang包中的常用类 java.lang包中的常用类
5.2 java.lang包中的常用类 Object类 Object类是Java程序中所有类的直接或间接父类,故有时也将Object被称为根类。 该类位于java.lang包中,它有如下几个常用方法: equals():用于比较两个对象是否指向同一块内存区域 hashCode():返回该对象的哈希码值(整数),用于标识一个对象,如果两个对象相等,则哈希码值一定相同; toString():返回值是String类型,描述当前对象的有关信息,当对象与String型数据的连接时,自动调用。 getClass():返回此 Object 对象运行时所属的类。
5.2 java.lang包中的常用类 源代码:TestObject.java Circle circle2 = new Circle(10); Circle circle3 = new Circle(10); Circle circle4 = circle3; System.out.println(circle2.getClass().getName()); System.out.println(circle2.equals(circle3)); System.out.printlncircle4.equals(circle3)); System.out.println(circle2.hashCode()); System.out.println(circle3.hashCode()); System.out.println(circle2.toString());
5.2 java.lang包中的常用类 Object类 运行结果的说明: (1)尽管半径都是10,但用new操作符创建的圆是两个不同的对象,所以其引用变量存储的引用是不同,因而当两个引用变量比较的时候,肯定是false。 (2)当将一个引用变量赋值给另一个引用变量的时候,实际上是将这个引用变量指向同一个对象,它们存储的引用是相同的,所以当它们比较的时候,是true。 (3)equals用于比较两个对象是否相同。
5.2 java.lang包中的常用类 Object类 (4)hashCode()返回的是一个与存储地址有关的整数,也称为散列值,如果两个对象相同,则它们的散列值也相同。但散列值相同,则不一定是相同的对象。 (5)toString():返回值是一个代表对象的字符串,一般由类名、@和无符号的哈希码的十六进制组成: 类名+ ‘@’ + Integer.toHexString(hashCode()) 比如:com.solo.teaching.Circle@15db9742 该方法一般会重写,比如字符串类就重写这个方法。
5.2 java.lang包中的常用类 System类 System类代表系统,系统级的很多属性和控制方法都放置在该类的内部,比如:标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。 它是一个特殊类,是一个公共最终类,不能被继承,也不能被实例化,即不能创建System类的对象。该类中所有的变量和方法都是静态的,使用时直接用:System.变量名、System.方法名,比如: System.out.println()等。
5.2 java.lang包中的常用类 System类 1. 字段 该类包含三个标准输入输出的字段,分别是: public static final InputStream in---标准输入,如键盘,in这个字段是InputStream类的一个对象。 public static final PrintStream out---标准输出,如显示器,out属于PrintStream类的一个对象,PrintStream类提供了很多print()、printf()和println()方法 。这就是前面System.out.println()写法的来历。 public static final PrintStream err---标准输出。
5.2 java.lang包中的常用类 System类 2. 方法 方法 描述 static long currentTimeMillis() 此方法返回以毫秒为单位的当前时间 static void exit(int status) 此方法终止当前运行的Java虚拟机. static void gc() 这种方法运行垃圾收集器. static Properties getProperties() 这个方法决定了当前系统属性.
5.2 java.lang包中的常用类 System类 源代码: TestCurrentTimeMillis.java TestGetProperties.java TestGc.java
5.2 java.lang包中的常用类 Math类 Math类提供了很多方法用于计算常用的数学函数,而且这些字段和方法都是静态的,可以直接使用类名来访问或调用,比如:Math.pow(a,b)、Math.random()等。 1.Math类定义的两个双精度常量的字段 static double E---常量,自然对数的底数e(2.7182818284590452354) static double PI---常量,圆周率pi(3.14159265358979323846)
5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ①三角函数 public static double sin(double a)------三角函数正弦。 public static double cos(double a)------三角函数余弦。 public static double tan(double a)------三角函数正切。 public static double asin(double a)------三角函数反正弦。 public static double acos(double a)------三角函数反余弦。 public static double atan(double a)------三角函数反正切。
5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ② 指数函数 public static double exp(double a)------返回ea的值。 public static double log(double a)------ 返回lna的值。 public static double pow (double y,double x)------ 返回以y为底数,以x为指数的幂值。 public static double sqrt(double a)------ 返回a的平方根。
5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ③ 舍入函数 public static intceil(double a):返回大于或等于a的最小整数 public static intfloor(double a):返回小于或等于a的最大整数。以下三个方法都有其它数据类型的重载方法: public static intabs(int a)------- 返回a的绝对值。 public static intmax(int a,int b)------- 返回a和b的最大值。 public static intmin(int a,int b)------- 返回a和b的最小值。
5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ④其它数学方法 public static double random( )------ 返回一个伪随机数,其值介于0和1之间。 public static double toRadians(doubleangle )------ 将角度转换为弧度。 public static double toDegrees (doubleangle)------ 将弧度转换为角度。
5.2 java.lang包中的常用类 String类 (1)字符串的概念:由字符构成的序列,属于引用型数据类型,Java专门提供了一个String类来处理字符串。 (2)字符串的声明: String 变量名; 比如:String s1; (3)创建字符串: String 变量名 = new String(); String 变量名 =“内容”; 例如: String s4 = new String(“Hello,java!”); String s1 = "Hello,java!";
5.2 java.lang包中的常用类 String类 (4)字符串常用方法: 求字符串长度length()方法: String s = "Welcome to Java"; System.out.println("该字符串的长度是:" + s.length()); 字符串的转换toLowerCase()和toUpperCase()方法: System.out.println("转换为小写:" + s.toLowerCase()); System.out.println("转换为大写:" + s.toUpperCase());
5.2 java.lang包中的常用类 String类 从字符串中获取字符:使用方法s.charAt(index)可获取字符串s中某个特定的字符,其中index的取值范围是0~s.length()-1之间。比如:s.charAt(3)返回值是c。
5.2 java.lang包中的常用类 String类 连接字符串:除了使用加号“+”连接字符串之外,还可以使用concat()连接字符串。 比如: String s = "Welcome to Java"; String s1 = "2014信息管理与信息系统"; System.out.println("两个字符串的连接:" + s.concat(s1));
5.2 java.lang包中的常用类 String类 比较字符串:常用的equals()和compareTo()方法 比如: String s = "Welcome to Java"; String s1 = "2014信息管理与信息系统"; String s2 = new String("Welcome to Java"); System.out.println(“比较两个字符串:" + s.equals(s1)); System.out.println(“比较两个字符串:" + s.equals(s2)); System.out.println(“比较两个字符串:" + s1.compareTo(s2));
5.2 java.lang包中的常用类 String类 比较字符串:常用的equals()和compareTo()方法 注意:==与equals之区别 对String来说,“==”是用来判断两个字符串(对象)的地址是否相同,即判断是否是同一个字符串的应用。 equals()则是判断两个字符串(对象)的值是否相等,如果相等则返回true。一般情况下,都是使用”equals()“来判断两个字符串的值是否相等,只有当你需要判断两个字符串是否是同一个对象时,才使用“==”。 源代码:TestStringEquals.java
5.2 java.lang包中的常用类 String类 比较字符串:equals()和compareTo()方法小结: 比较两个字符串是否相等,使用equals(),如果它们相等,则返回true,如果不等,则返回false。不能使用“==”来判断两个字符串是否相等,它只能检测这两个字符串是否指向同一个对象。 compareTo()方法用于两个字符串等于、大于和小于等的比较,等于返回0,大于返回正整数,小于返回负整数。如使用大于、等于等比较运算符比较两个字符串,会发生语法错误。
5.2 java.lang包中的常用类 String类 截取较字符串substring()方法 str.substring(int beginIndex)截取str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给一个新的字符串。 str.substring(int beginIndex,int endIndex)截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给一个新的字符串。 System.out.println("截取字符串:" + s.substring(11)); System.out.println("截取字符串:" + s.substring(3,11)); 源代码:TestSubstring.java
5.2 java.lang包中的常用类 String类 boolean isEmpty(),当且仅当length()为0时返回true,用于判断字符串是否为空 String replace(char oldChar,char newChar)返回一个新的字符串,其中newChar替换了此字符串中所有的oldChar String[] split(String str)返回一个字符串数组,原字符串将以str作为分隔符,分割成若干个组成部分 trim():trim():去掉字符串首尾的空格。
5.2 java.lang包中的常用类 StringBuffer类 为什么需要StringBuffer类 String是不变类(immutable object),用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大。为此,Java提供了一个StringBuffer类,这个类可以在字符串中添加、插入或追加新的内容,在这方面其效率要比String高。 StringBuffer不是不变类,在修改字符串内容时,不会创建新的对象,因此,它比String类更适合修改字符串。
有4个构造方法,可以使用构造方法创建一个空的构造方法 或从一个字符串创建一个构造方法。 5.2 java.lang包中的常用类 StringBuffer类 StringBuffer类的构造方法 有4个构造方法,可以使用构造方法创建一个空的构造方法 或从一个字符串创建一个构造方法。 StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 StringBuffer(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。 StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: 5.2 java.lang包中的常用类 StringBuffer类 StringBuffer的常用方法 StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: append():将任何类型数据的字符串追加到调用的StringBuffer对象的末尾。 insert():插入字符串。 delete():删除字符串。 reverse():将此字符序列用其反转形式取代。 示例源代码:TestStringBuilder.java
StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: 5.2 java.lang包中的常用类 StringBuffer类 StringBuffer的常用方法 StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: append方法 insert方法 reverse方法
5.2 java.lang包中的常用类 包装类 什么是包装类? 基本数据类型不具有对象的特性,而Java是用面向对象的思想去处理数据,为此,Java为每个基本数据类型都提供了一个包装类。 与8种基本数据类型相对应,包装类分别是: Character、Byte 、 Short 、 Integer 、 Long 、 Float 、 Double 、 Boolean。 使用包装类,就可以像操作对象那样来操作基本数据类型。
5.2 java.lang包中的常用类 基本数据类型 包装类 byte Byte boolean Boolean short Short char Character int Integer long Long float Float double Double
5.2 java.lang包中的常用类 包装类 包装类常用的字段有哪些? 这些类一般都提供了最大值、最小值等一些常数字段,以方便使用,如: static double MAX_VALUE static double MIN_VALUE static int MAX_VALUE static int MIN_VALUE 使用:double max = Double.MAX_VALUE;
5.2 java.lang包中的常用类 包装类 包装类常用的构造方法有哪些? 包装类没有无参构造方法,但提供带参数的构造方法: 通过构造方法,可以使用基本数据类型值来构造包装类,比如:new Double(5.0)、new Integer(5)。 Double(double value) 构造一个新分配的 Double 对象,它表示基本的 double 参数。 Integer(int value) 构造一个新分配的 Integer 对象,它表示指定的 int 值。
5.2 java.lang包中的常用类 包装类 包装类常用的方法有哪些? 每个包装类都包含了doubleValue(), floatValue(), intValue(), longValue(), shortValue(), 和byteValue()方法,可将对象转换为基本类型值。 比如: Double obj = new Double(10.35); double d = obj.doubleValue(); System.out.println("Value = " + d);
5.2 java.lang包中的常用类 包装类 包装类常用的方法有哪些? 数值包装类中包含compareTo()方法用于比较两个数值,并且如果该数值大于、等于或小于另一个数值时,返回1、0、-1。 例如: new Double(2.4).compareTo(new Double(2.3)) //returns 1; new Double(2.3).compareTo(new Double(2.3)) //returns 0; new Double(2.3).compareTo(new Double(2.5))//returns -1;
5.2 java.lang包中的常用类 包装类 包装类常用的方法有哪些? 提供了valueOf(String),toString(),用于从字符串转换及或转换成字符串。 还提供了parseInt、 parseDouble等静态方法将一个数值字符串转换为一个int或double值。 int a = Integer.parseInt("11"); int b = Integer.parseInt("11", 2) ; int c = Integer.parseInt("12", 8) ;
5.2 java.lang包中的常用类 包装类 包装类装箱或拆箱是什么? 将基本类型值转换为包装类对象的过程称为装箱(boxing),相反的转换过程称为拆箱(unboxing)。 Java允许基本类型和包装类类型之间自动转换。如果一个基本类型值出现在需要对象的环境中,编译器会将基本类型值进行自动装箱;如果一个对象出现需要基本类型值得环境中,编译器会将对象进行自动拆箱。 以上就称为自动装箱或自动拆箱。
5.2 java.lang包中的常用类 包装类 包装类装箱或拆箱是什么? Integer a = new Integer(3); Integer b = 3; // 将3自动装箱成Integer包装类 int c = 3; System.out.println(a == b); // 运行结果为:false。两个引用变量a和b没有指向同一个对象 System.out.println(a == c); // 运行结果为:true。a自动拆箱成int类型再和c比较
5.3 java.util包中常用的类 Date类 Date类位于java.util包中,表示日期和时间,提供两个构造方法来实例化Date对象。 Date类提供了方法来处理日期或时间,但其中的一些方法已过时,不推荐使用。 构造方法 说明 Date() 使用当天的日期创建 Date Date(long date) 使用自 1970 年 1 月 1 日0时0分0秒以后的指定毫秒数创建 Date
5.3 java.util包中常用的类 Date类 // 创建并初始化一个日期(初始值为当前日期) Date date = new Date(); System.out.println("现在的日期是 = " + date); System.out.println("现在的日期是 = " + date.toString()); 运行输出的结果是: 现在的日期是 = Wed Oct 19 08:25:36 CST 2016 CST (时区缩写),China Standard Time,Central Standard Time,美国,澳大利亚,古巴或中国的标准时间。
5.3 有关日期时间的类 SimpleDateFormat类 可以通过java.text.SimpleDateFormat 类完成功能。但是如果要进行格式化的话,有一点必须注意的是,需要指定一个格式化日期的模板: 年(yyyy)、月(MM)、日(dd)、时(HH)、 分(mm)、秒(ss)、毫秒(SSS)
5.3 java.util包中常用的类 SimpleDateFormat类 // 设置日期和时间的输出的格式模板 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); // 创建并初始化一个日期(初始值为当前日期) Date date = new Date(); String dt = sdf.format(date); System.out.println("格式化后的日期为: " + dt); //格式化后的日期为: 2016-10-19 08:52:22.054
5.3 java.util包中常用的类 Calendar日历类 Java中提供了Calendar用于日期进行操作的类,其声明: public abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable<Calendar> 该类被abstract所修饰,说明不能通过new的方式来获得实例,对此,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的对象,getInstance方法返回一个Calendar对象(该对象为Calendar的子类对象),其日历字段已由当前日期和时间初始化: Calendar rightNow = Calendar.getInstance(); 示例代码:TestCalendar.java
小结: Java类库什么是类库?如何使用? java.lang包中的常用类 日期时间类 作业 见课程网站“教学资源”第5章