第六章 常用系统类

一、Java API简介

Java常用的包:

  • java.lang包:这是Java语言的核心类库,包含了最常用的类,如基本数据类型包装类、数学运算类、字符串类、线程、异常处理类等。 使用java.lang包下的类不需要通过import导入,程序运行时,系统会自动加载该包
  • java.io包:主要包含与输入/输出有关的类,这些类提供了对不同的输入和输出设备读/写数据的支持,这些输入和输出设备包括键盘、显示器、磁盘文件等。

  • java.util包:提供一些常用的工具类,如处理时间的Date类,非常重要的集合类库也在这个包下。

  • javax.swing/java.awt包:提供了创建图形用户界面程序的类。包中包含了窗口、对话框、菜单等类。

  • java.net包:包含了与网络编程相关的类库,包括Socket通信支持、Internet访问支持等。

  •  java.sql包:包含数据库编程的类库,利用它可以使Java程序具有访问不同类型数据库的功能。

二、Object类

1.Object类常用方法

Java.lang.Object类是所有类的直接或间接父类,处在类的最高层次。

一个类在声明时若不包含关键字extends,系统就会认为该类直接继承Object类。

类中包含了所有Java类的 公共属性和方法,这些属性和方法在任何类中均可以直接使用。

(1)public final class getClass( )

  • 获取当前对象所属类的信息,返回class对象。
  • 任何方法所属的类都是确定的,所以该方法不能被子类重写(final方法不能被子类改写)。
  • 通过class类,程序可以在运行时动态访问类的信息。

(2)public int hashCode( )

  • 得到用以标志对象的哈希码。
  • 默认情况下,该方法将对象在内存中的地址转换为一个int型整数作为返回值
  • 未重写该方法时,任何对象的哈希码都是唯一的。

(3)public boolean equals(Object obj) 

  • 比较两个对象是否“同一”,即比较两个引用是都指向同一个对象,与==含义相同。
  • 该方法经常被重写,以真正实现比较两个对象是否相等。
  • 通常情况下,若子类重写equals()方法,也必须重写hashCode()方法,主要是为了和集合类集合在一起时可以正常工作。
  • 官方文档中对hashCode方法有如下约定:如果两个对象根据equals方法是相等的,那么hashCode方法也应该返回相同的值;如果两个对象根据equals方法是不等的,并不要求hashCode方法的结果不一样。
  • 判断两个字符串内容是否相等,要用equals( )方法,不能用==

(4)protected Object clone( )

  • 返回当前对象的一个拷贝,该方法通常需要在子类中重新改写才能使用。 

(5)public String toString( )

  • 字符串形式返回对象的相关信息。 

(6)protected void finalize( )

  • 定义垃圾回收器回收当前对象时 所需完成的清理工作。 

2.实例

public class Test{
    public static void main(String[] args) {
        Test test1=new Test();
        System.out.println("test1对象所属于的类为:"+test1.getClass());//class Test
        System.out.println("test1对象的哈希码值为:"+test1.hashCode());
        System.out.println("test1对象的toString()方法返回值为:"+test1.toString());
        Test test2=new Test();
        System.out.println("利用equals方法判断两个对象是否相等的结果:"+test1.equals(test2));//false
        System.out.println("利用==判断两个对象是否相等的结果:"+test1.equals(test2));//false
        String s1=new String("abc");
        String s2=new String("abc");
        String s3="123";
        String s4="123";
        System.out.println("s1==s2结果为"+(s1==s2));//false
        System.out.println("s1.equals(s2)结果为:"+(s1.equals(s2)));//true,String类中改写了equals方法
        System.out.println("s3==s4结果为"+(s3==s4));//true,字符串常量生成的变量,其所存放的地址是相同的
        System.out.println("s3.equals(s4)结果为:"+(s3.equals(s4)));//true
    }
 
}

三、基本数据类型包装类

1.基本数据类型包装类

(1)Java中提供了基本类型的封装类,包含更多的属性和方法,如下表:

 (2)基本数据类型封装类有如下共同特点:

  • 类中定义了对应基本类型的常数;
  • 提供基本数据类型和字符串的相互转换方法;
  • 对象中封装的值是不可改变的,改变对象值的唯一的方法是创建一个新的对象;
  • 对equals(),hashCode(),toString()方法做了改写。

2.Integer类的主要属性和方法

(1)属性

  • public static final int MAX_VALUE  //返回int数据的最大值
  • public static final int MIN_VALUE  //返回int数据的最小值

(2)构造方法

  •  public Integer(int value);  //利用整数生成对象
  •  public Integer(String s);  //利用字符串生成对象

(3)成员方法

  • public int intValue();  //返回对象的整数值
  • public double doubleValue();  //返回对象的浮点数值
  • public String toString();  //将对象对应整数值转换为字符串
  • public static String toString(int i);  //将指定整数转换为10进制字符串
  • public static String toString(int i,int radix);  //表示将10进制的 i 转换为radix进制的整数
  • public static int parseInt(String s);  //将字符串转化为整数,s必须是数字
  • public static int parseInt(String s,int radix);  //用于表示radix进制的s转换为10进制是什么,基数radix可以是10, 2, 8, 或 16 等进制数,表示的是前边的s是什么进制数。
  • public static Integer valueOf(String s);  //将字符串转换为对象
  • 常用操作:基本类型常量转字符串类型,连接一个空串即可:String s1=123+" ";
public class Train {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        Integer i1 = new Integer(123);
        Integer i2 = new Integer("123");
        System.out.println(i1 == i2);
        System.out.println(i1.equals(i2));//判断两个值是否相等
        System.out.println(i1.intValue());
        System.out.println(i1.doubleValue());
        int i3 = Integer.parseInt("12");//字符串转基本类型
        int i4 = Integer.parseInt("34");
        System.out.println(i3 + i4);
        int i5=Integer.parseInt("12",8);//其它进制转十进制
        String s1=Integer.toString(16,16);//十进制转其它进制
        System.out.println(i5+","+s1);
        Integer a = 10;//基本类型和包装类型自动转换,自动装箱(Auto Boxing)
        int i = a;//自动拆箱(Auto Unboxing)
        System.out.println(i);
        String s2=123+"";//基本类型转字符串的简单方法
        System.out.println(s2);
    }
}
//结果
2147483647
-2147483648
false
true
123
123.0
46
10,1010
10
123

四、字符串类

1.String 和StringBuffer

  • String用来表示字符串常量,字符串被创建后内容不能修改。
  • StringBuffer用来表示字符串变量,字符串内容创建后可以修改。

2.StringBuffer类的常用方法

(1)构造方法

  • public StringBuffer( );  //创建一个空的StringBuffer对象
  • public StringBuffer(int length);  //设置初始容量
  • public StringBuffer(String s);  //利用已知字符串初始化StringBuffer对象

(2)成员方法

  • public StringBuffer append (String s);  //在字符串的尾部追加指定字符串,重载方法有多个
  • public StringBuffer insert(int index,String s);  //在指定位置插入指定字符串
  • public void setCharAt(int index,char c);  //将index处的字符设为c
  • public StringBuffer reverse();  //将字符串翻转
  • public StringBuffer replace(int start,int end,String s);  //用指定字符串替换指定位置字符串 

 3.StringBuffer实例

public class Train {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("abcd");
        s.append("efg");//append是方法,不能放在println语句中,下同
        System.out.println(s);//abcdefg
        s.insert(0, "happy");//插入
        System.out.println(s);//happyabcdefg
        s.setCharAt(1,'x');//将某处的字符设置为另一个字符
        System.out.println(s);//hxppyabcdefg
        s.reverse();//翻转
        System.out.println(s);//gfedcbayppxh
        s.replace(0, 3, "str");//替换
        System.out.println(s);//strdcbayppxh
    }
}

五、System类和Runtime类

 1.System类

Java.lang.System类是一个很特殊的类,该类不能被实例化,是一个非常典型的静态方法类,主要提供与系统相关的静态方法和一些静态对象。

(1)属性

  • public static final InputStream in //标准输入流
  • public static final PrintStream out //标准输出流
  • public static final PrintStream err //标准错误输出流
  • 通常标准输入是指控制台下的键盘输入,标准输出和标准错误输出是指控制台下的屏幕输出,流已经打开并准备输入和输出数据。

(2)方法

  • public static void exit(int status) 

    //终止当前正在运行的Java虚拟机,参数用作状态码,按照惯例,非0的状态码表示异常终止。

  • public static long currentTimeMillis()

    //返回以毫秒为单位的当前时间,这个毫秒就是自1970年1月1日0时起的毫秒数。可以利用该方法计算一段代码的运行时间。

  • public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

    //复制数组,源数组中srcPos 到 srcPos+length-1 之间的数据被复制到目标数组中 destPos 到 destPos+length-1 位置。 

 (3)实例

public class Test {
    public static void main(String[] args) {
        long timeStart = System.currentTimeMillis();
        String[] s1 = { "aaa", "bbb", "ccc", "ddd", "eee", "fff" };
        String[] s2 = new String[6];
        System.arraycopy(s1, 0, s2, 0, s1.length);// 将s1内容全部赋给s2
        long timeEnd = System.currentTimeMillis();
        System.out.println("数组复制操作运行时间为" + (timeEnd - timeStart));
        for (String s : s2) {
            System.out.println(s);
        }
    }
}

2.Runtime类

Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。

Java虚拟机本身就是Windows上的一个进程,这个进程可以启动其他的Windows程序,通过这种方式启动的Windows程序实例就称为子进程。Java虚拟机调用Runtime的exec方法就可以启动这个子进程,其返回值是代表子进程的Process对象。

例题:在Java程序中启动一个Windows记事本程序,并打开一个文本文件,启动的记事本程序在8秒后被关闭。

public class Test {
    public static void main(String[] args) {
        Process p = null;
        try {
            p = Runtime.getRuntime().exec("notepad.exe c:\\a.txt");
            Thread.sleep(8000);
            p.destroy();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 六、数学运算类

1.Math类

(1)属性

  • public static final double E; //数学常量e
  • public static final double PI; //数学常量圆周率

(2)方法

  • public static int abs(int i);  //求绝对值 
  • public static double sin(double a);  //求正弦
  • public static double log(double a);  //求自然对数(以e为底)
  • public static double max(double a,double b);  //求最大值
  • public static  double pow(double a,double b);  //求乘幂
  • public static double random();  //产生0-1之间的伪随机数
  • public static double exp(double a);  //求e的a次幂
  • public static int round(float a);  //四舍五入
  • public static double sqrt(double a);  //求平方根

(3)实例

public class Train {
    public static void main(String[] args) {
        System.out.println(Math.E);
        System.out.println(Math.PI);
        System.out.println(Math.random());//random是方法,要加括号,其实也可以自动补全
        System.out.println(Math.abs(-12));
        System.out.println(Math.sin(Math.PI));
        System.out.println(Math.log(Math.E*Math.E));
        System.out.println(Math.max(12, 15));
        System.out.println(Math.pow(2, 3));
        System.out.println(Math.exp(2));
        System.out.println(Math.round(5.4));
        System.out.println(Math.sqrt(9));     
    }
}

2.BigInteger/BigDecimal类

由于编程语言所提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,Java中提供了Java.math.BigInteger和Java.math.BigDecimal实现大整数和大实数运算。

下面介绍BigInteger的常用属性和方法,BigDecimal使用方式类似。

(1)属性

  • public static final BigInteger ONE;  //表示BigInteger的1
  • public static final BigInteger ZERO;  //表示BigInteger的0
  • public static final BigInteger TEN;  //表示BigInteger的10

(2)构造方法

  • public  BigInteger(String val);  //利用十进制整数字符串创建BigInteger对象

  • BigInteger x=new BigInteger("98765432112345");!!!字符串形式

(3)成员方法

  • public BigInteger add(BigInteger val);  加法

  • public BigInteger subtract(BigInteger val);  减法

  • public BigInteger multiply(BigInteger val);  乘法

  • public BigInteger divide(BigInteger val);  除法

  • public int Compare To(BigInteger val);  比较大小,相等返回0,大于返回1,小于返回-1

import java.math.BigInteger;//导入模块
public class Train {
    public static void main(String[] args) {
    	BigInteger x=new BigInteger("98765432112345");//字符串形式
    	BigInteger y=new BigInteger("7896543261782");
    	BigInteger z1=x.add(y);
    	BigInteger z2=x.subtract(y);
    	BigInteger z3=x.multiply(y);
    	BigInteger z4=x.divide(y);
    	int z5=x.compareTo(y);			
    }
 }

3.数字格式化

Java提供了Java.text.DecimalFormat类,用于满足各种数字格式化的要求。 

import java.text.DecimalFormat;
public class Train {
    public static void main(String[] args) {
    	double pi=3322.1415926;
    	long a=1234567890;
    	DecimalFormat df1=new DecimalFormat("0");//取一位整数,会四舍五入
    	DecimalFormat df2=new DecimalFormat("0.00");//取一位整数和两位小数
    	DecimalFormat df3=new DecimalFormat("00.000");//取两位整数和三位小数,整数不足部分以0填补
    	DecimalFormat df4=new DecimalFormat("#");//取所有整数部分
    	DecimalFormat df5=new DecimalFormat("#.##%");//以百分比方式计数,并保留两位小数
    	DecimalFormat df6=new DecimalFormat("#.#####E0");//科学计数法,并保留5位小数
    	DecimalFormat df7=new DecimalFormat("00.####E0");//两位(三位3个0)整数的科学计数法,并保留4位小数
    	DecimalFormat df8=new DecimalFormat(",###");//每3位以逗号分隔,从个位开始
    	System.out.println(df8.format(a));
    	System.out.println(new DecimalFormat("。。。###米").format(a));//将格式嵌入文本
    	
    }
 }

七、日期时间类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值