第7章 - Java 其他对象 和 异常

7章 - Java 其他对象异常

 

16 其他对象API

16.1 System

(示例: basic.sysobj.SystemDemo)

: System的方法如下

属性和方法(均是静态方法)

说明

final InputStream in

"标准"输入流

final PrintStream out

"标准"输出流

final PrintStream err

"标准"错误输出流

void setIn(InputStream in)

重新分配"标准"输入流

void setOut(PrintStream out)

重新分配"标准"输出流

void setErr(PrintStream err)

重新分配"标准"错误输出流

Console console()

返回与当前Java虚拟机关联的唯一Console对象(如果有)

Channel inheritedChannel()

返回从创建此Java虚拟机的实体中继承的信道

void setSecurityManager(final SecurityManager s)

设置系统安全性

SecurityManager getSecurityManager()

获取系统安全接口

native long currentTimeMillis()

返回以毫秒为单位的当前时间

native long nanoTime()

返回最准确的可用系统计时器的当前值以毫微秒为单位

native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

从指定源数组中赋值一个数组从指定的位置开始复制到目标数组的指定位置结束,目标数组多的将设置默认值少的则报异常长度不够

src: 源数组      srcPos: 开始复制的位置

dest: 目标数组   destPos: 目标数组开始复制的位置

length: 复制的长度

native int identityHashCode(Object x)

返回给定对象的哈希码该代码与默认的方法hashCode()返回的代码一样无论给定对象的类是否重写hashCode()

Properties getProperties()

确定当前的系统属性

String lineSeparator()

UNIX/LINUX 返回 \n

Windows 返回\r\n

void setProperties(Properties props)

将系统属性设置为Properties参数

String getProperty(String key)

获取指定键指示的系统属性

String getProperty(String key, String def)

获取用指定键描述的系统属性

String setProperty(String key, String value)

设置指定键指示的系统属性

String clearProperty(String key)

移除指定key的系统属性

String getenv(String name)

获取指定的环境变量值

java.util.Map<String,String> getenv()

返回一个不能修改的当前系统环境的字符串映射视图

void exit(int status)

终止当前正在运行的Java虚拟机

void gc()

运行垃圾回收器

void runFinalization()

运行处于挂起终止状态的所有对象的终止方法

void runFinalizersOnExit(boolean value)

已过期该方法具有固有的不安全性它可能对正在使用的对象调用终结方法而其他线程同时正在操作这些对象从而导致不正确的行为或死锁

void load(String filename)

从作为动态库的本地文件系统中以指定的文件名加载代码文件

void loadLibrary(String libname)

加载由libname参数指定的系统库

native String mapLibraryName(String libname)

将一个库名称映射到特定于平台的、表示本机库的字符串中

 

 

16.2 Runtime(单例模式)

(示例: basic.sysobj.RuntimeDemo)

: Runtime的方法如下

属性和方法

说明

static Runtime getRuntime()

返回与当前 Java 应用程序相关的运行时对象(单例模式)

void exit(int status)

通过启动虚拟机的关闭序列终止当前正在运行的Java虚拟机

    JVM添加关闭钩子,当JVM关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,执行完这些钩子后,JVM才会关闭(可以进行内存清理、对象销毁等操作)

void addShutdownHook(Thread hook)

注册新的虚拟机来关闭钩子

boolean removeShutdownHook(Thread hook)

取消注册某个先前已注册的虚拟机关闭钩子

void halt(int status)

强行终止目前正在运行的 Java 虚拟机

static void runFinalizersOnExit(boolean value)

已过时此方法本身具有不安全性它可能对正在使用的对象调用终结方法而其他线程正在操作这些对象从而导致不正确的行为或死锁

Process exec(String command)

在单独的进程中执行指定的字符串命令

eg:如打开系统的文本,execute xxx.exe

Process exec(String command, String[] envp)

在指定环境的单独进程中执行指定的字符串命令

Process exec(String command, String[] envp, File dir)

在有指定环境和工作目录的独立进程中执行指定的字符串命令

Process exec(String cmdarray[])

在单独的进程中执行指定命令和变量

Process exec(String[] cmdarray, String[] envp)

在指定环境的独立进程中执行指定命令和变量

Process exec(String[] cmdarray, String[] envp, File dir)

在指定环境和工作目录的独立进程中执行指定的命令和变量

native int availableProcessors()

Java虚拟机返回可用处理器的数目

native long freeMemory()

返回Java虚拟机中的空闲内存量

native long totalMemory()

返回Java虚拟机中的内存总量

native long maxMemory()

返回Java虚拟机试图使用的最大内存量

native void gc()

运行垃圾回收器

static native void runFinalization0()

 

void runFinalization()

运行挂起finalization的所有对象的终止方法

native void traceInstructions(boolean on)

启用/禁用指令跟踪

native void traceMethodCalls(boolean on)

启用/禁用方法调用跟踪

void load(String filename)

加载作为动态库的指定文件名

void loadLibrary(String libname)

加载具有指定库名的动态库

InputStream getLocalizedInputStream(InputStream in)

已过时JDK1.1 开始将本地编码字节流转换为Unicode字符流的首选方法是使用InputStreamReaderBufferedReader

OutputStream getLocalizedOutputStream(OutputStream out)

已过时JDK1.1开始Unicode字符流转换为本地编码字节流的首选方法是使用OutputStreamWriterBufferedWriterPrintWriter

 

 

16.3 Math

(示例: basic.sysobj.MathDemo)

: Math的方法如下

属性和方法(静态)

说明

final double E = 2.7182818284590452354

比任何其他值都更接近e(即自然对数的底数)double

final double PI = 3.14159265358979323846

比任何其他值都更接近pi(即圆的周长与直径之比)double

double sin(double a)

返回角的三角正弦

double cos(double a)

返回角的三角余弦

double tan(double a)

返回角的三角正切

double sinh(double x)

返回 double 值的双曲线正弦

double cosh(double x)

返回 double 值的双曲线余弦

double tanh(double x)

返回 double 值的双曲线余弦

double asin(double a)

返回一个值的反正弦返回的角度范围在 -pi/2  pi/2 之间

double acos(double a)

返回一个值的反余弦返回的角度范围在 0.0  pi 之间

double atan(double a)

返回一个值的反正切返回的角度范围在 -pi/2  pi/2 之间

double atan2(double y, double x)

将矩形坐标(xy)转换成极坐标(r, theta), 返回所得角theta

double toRadians(double angdeg)

将用角度表示的角转换为近似相等的用弧度表示的角

double toDegrees(double angrad)

将用弧度表示的角转换为近似相等的用角度表示的角

double exp(double a)

返回欧拉数 e  double 次幂的值

double expm1(double x)

返回 ex -1

double log(double a)

返回 double 值的自然对数(底数是 e)

double log10(double a)

返回 double 值的底数为10 的对数

double log1p(double x)

返回参数与 1 之和的自然对数

double sqrt(double a)

返回正确舍入的 double 值的正平方根

double cbrt(double a)

返回 double 值的立方根

double IEEEremainder(double f1, double f2)

按照 IEEE 754 标准的规定对两个参数进行余数运算

double ceil(double a)

(天花板)返回最小的(最接近负无穷大)double该值大于等于参数并等于某个整数

double floor(double a)

(地板)返回最大的(最接近正无穷大)double该值小于等于参数并等于某个整数

int/long round(float/double a)

(等同于floor(a+5))返回最接近参数的 int/long

double pow(double a, double b)

返回第一个参数的第二个参数次幂的值

double rint(double a)

返回最接近参数并等于某一整数的 double 

double random()

返回带正号的 double 值,该值大于等于 0.0 且小于 1.0

int addExact(int x, int y)

 

long addExact(long x, long y)

 

int subtractExact(int x, int y)

 

long subtractExact(long x, long y)

 

int multiplyExact(int x, int y)

 

long multiplyExact(long x, long y)

 

int incrementExact(int a)

 

long incrementExact(long a)

 

int decrementExact(int a)

 

long decrementExact(long a)

 

int negateExact(int a)

 

long negateExact(long a)

 

int toIntExact(long value)

 

int floorDiv(int x, int y)

 

long floorDiv(long x, long y)

 

int floorMod(int x, int y)

 

long floorMod(long x, long y)

 

int/long/float/double

abs(int/long/float/double a)

返回对应int/long/float/double值得绝对值

int/long/float/double max(int/long/float/double a, int/long/float/double b)

返回两个 int/long/float/double值中较大的一个

int/long/float/double min(int/long/float/double a, int/long/float/double b)

返回两个 int/long/float/double值中较小的一个

float/double ulp(float/double d)

返回参数的 ulp 大小

float/double signum(float/double d)

返回参数的符号函数;如果参数为 0,则返回0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0

double hypot(double x, double y)

返回 sqrt(x2 +y2),没有中间溢出或下溢

float/double copySign(float/double magnitude, float/double sign)

返回带有第二个浮点参数符号的第一个浮点参数

int getExponent(float/double d)

返回 float/double 表示形式中使用的无偏指数

float/double nextAfter(float/double start, float/double direction)

返回第一个参数和第二个参数之间与第一个参数相邻的浮点数

float/double nextUp(float/double d)

返回 d 和正无穷大之间与 d 相邻的浮点值

float/double nextDown(float/double d)

 

float/double scalb(float/double d, int scaleFactor)

返回 d × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以float/double 值集合中的一个值

double powerOfTwoD(int n)

 

float powerOfTwoF(int n)

 

 

 

16.4 Date

(示例: basic.sysobj.DateDemo)

    日期对象和毫秒值之间的转换

1.毫秒值-> 日期对象

     1).通过Date对象的构造方法new Date(timeMillis);

     2).还可以通过setTime设置

2.日期对象--> 时间戳(13位毫秒值)

     1)Date对象提供getTime()

3.日期对象--> 日期格式字符串

       Date datenewDate();

       //获取日期格式对象。具体着默认的风格。FULL LONG等可以指定风格。

       DateFormat dateFormat= DateFormat.getDateInstance(DateFormat.LONG);

       dateFormat= DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);

//     System.out.println(dateFormat);

       //如果风格是自定义的如何解决呢?

       dateFormatnewSimpleDateFormat("yyyy-MM-dd");

       String str_datedateFormat.format(date);

       System.out.println(str_date);

4.日期格式字符串--> 日期对象

使用的是DateFormat类中的parse()方法

       String str_date"2012419";

       str_date"2011-8-17";

       DateFormat dateFormat= DateFormat.getDateInstance(DateFormat.LONG);

       dateFormatnewSimpleDateFormat("yyy-MM-dd");

       Date datedateFormat.parse(str_date);

       System.out.println(date);

 

 

16.5 Calendar(日历)

(示例: basic.sysobj.CalendarDemo)

       Calendar c= Calendar.getInstance();

       intyearc.get(Calendar.YEAR);

       intmonthc.get(Calendar.MONTH)+1;

       intdayc.get(Calendar.DAY_OF_MONTH);

       intweekc.get(Calendar.DAY_OF_WEEK);

       System.out.println(year""month""day""getWeek(week));

 

 

 

17 异常

(basic.exceptions.exceptionDemo)

 

17.1 异常概述

异常是在运行时期发生的不正常情况。Java把程序中可能会发生的错误称为异常并提供Throwable的超类

Throwable

    |-- Error及其子类:指示合理的应用程序不应该试图捕获的严重问题

       1).通常出现重大问题如运行类不存在或者内存溢出等(是由JVM抛出的严重性的问题)

       2).这种问题发生一般不编写针对代码对其处理

    |-- Exception及其子类:给出合理的应用程序需要捕获的异常

       在运行时运行出行出现的情况可以通过try catch finally结合thorwsthrow

可抛性:throws throw, 凡是可以被这两个关键字所操作的类和对象都具备可抛性

    对于Exception可以catch(Exception e),对于Error必须使用catch(Throwable e)才能捕获,但对于Error错误,不建议抛异常处理,Java系统级别的Error,系统解决完毕就可以了

 

17.2 异常的分类

异常的分类

1).编译时被检测异常只要是Exception和其子类都是除了特殊子类RuntimeException体系.  

    这种问题一旦出现希望在编译时就进行检测让这种问题有对应的处理方式这样的问题可以针对性处理

2).编译时不检测异常(运行时异常): 就是Exception中的RuntimeException和其子类

    这种问题的发生无法让功能继续运算无法进行更多是因为调用者的原因导致的而或者引发了内部状态的改变导致的那么这种问题一般不处理直接编译通过在运行时让调用者调用时的程序强制停止让调用者对代码进行修正

    所以自定义异常时要么继承Exception. 要么继承RuntimeException.

    Java中可以捕获的异常(Exception类的子类), 分为可控式异常和运行时异常两种类型

 

17.2.1 可控式异常

    Java中把那些可以预知的错误(从文件中读取数据对数据库进行操作在程序编译时对程序可能存在的错误进行处理并给出具体的错误信息), 我们把这些错误称为可控式异常

常见的可控式异常及说明

异常

说明

IOException

当发送某种I/O异常抛出该异常

SQLException

提供关于数据库访问错误或其他错误信息的异常

ClassNotFoundException

类没有找到异常

NoSuchFieldException

类不包含指定名称的字段时抛出该异常

NoSuchMethodException

无法找到某一特定方法时抛出该异常

    由于在构造方法中加载basic包中的Test类时, Java的虚拟机没有找到Test从而引发了ClassNotFoundException异常所以在控制台输出了ClassNotFoundException这样的异常信息

 

17.2.2 运行时异常

    Java中有些错误是不能被编译器检测到的例如, 1).进行0作为除数抛出的异常. 2).试图把一个不是由数字组成的字符串使用Integer类的parseInt()方法转换为整数等. Java的编译器是检测不到的因而能够正常编译但是在运行时就会发生异常把这种异常称之为运行时异常

常见的运行时异常及说明

异常

说明

IndexOutOfBoundsException

指示某集合或数组的索引值超出范围是抛出该异常

NullPointerException

应用程序试图在需要对象的地方使用null,抛出该异常

ArithmeticException

当出现异常的运算条件时抛出该异常

IllegalArgumentException

抛出的异常表明向方法传递了一个不合法或不正确的参数

ClassCaseException

当试图将对象强制转换为不是实例的子类时,抛出该异常

 

 

17.3 获取异常信息

    Javajava.lang.Throwable类是所有异常类的超类该类提供了获得异常信息的方法

获取异常信息的方法及说明

方法

说明

String getLocalizedMessage()

获得此Throwable的本地化描述

String getMessage()

获得此Throwable的详细消息字符串

void printStackTrace()

将此Throwable及其栈踪迹输出至标准错误流

String toString()

获取此Throwable的简短描述

 

 

17.4 处理异常

异常处理的原则

1).函数内容如果抛出需要检测的异常那么函数上必须要声明throws. 

   否则必须在函数内用try catch捕捉否则编译失败

2).如果调用到了声明异常的函数要么try catch要么throws, 否则编译失败

3).什么时候catch, 什么时候throws 呢?

   功能内容可以解决catch。解决不了throws告诉调用者由调用者解决

4).一个功能如果抛出了多个异常那么调用时必须有对应多个catch进行针对性的处理

   内部又几个需要检测的异常就抛几个异常抛出几个catch几个

异常的注意事项

    1).子类在覆盖父类方法时父类的方法如果抛出了异常那么子类方法只能抛出父类的异常或该异常的子类

    2).如果父类抛出多个异常那么子类只能抛出父类异常的子集

简单说子类覆盖父类只能抛出父类的异常或者子类或者子集.  

注意如果父类的方法没有抛出异常那么子类覆盖时绝对不能抛就只能try

    Java语言中当程序发生异常时可以使用try...catch, try...catch...finallytry...finally进行处理try, catchfinally是进行异常处理的关键字

 

17.4.1 使用try...catch处理异常

    对于程序中可能发生异常的与可以将其添加到try...catch语句块中这样当程序发生异常时就可以对其进行相应处理

    try {

       需要正常执行的语句;

    } catch (Exception e) {

       对异常进行处理的语句;

    } 

    1).trycatch之间的{}的内容是程序需要正常执行但又可能发生异常的语句

    2).catch后的()的内容程序需要处理的异常类型

    3).catch后的{}的内容对发生该异常类型的相应处理的语句

 

17.4.2 使用try...catch...finally处理异常

    try {

       需要正常执行的语句;

    } catch (Exception e) {

       对异常进行处理的语句;

    } finally {

       一定会执行的语句;

    } 

    1).finally后的{}的内容不管程序是否发生异常都会执行的语句(通常用于try...catch执行完后进行垃圾回收释放资源关闭数据库连接关闭IO流等操作)

 

17.4.3 使用try...finally处理异常

    try {

       需要正常执行的语句;

    } catch (Exception e) {

       对异常进行处理的语句;

    }

 

17.4.4 抛出异常

throws throw的区别

throws使用在函数上

throw使用在函数内

throws抛出的是异常类可以抛出多个用逗号隔开

throw抛出的是异常对象

1).使用throws声明抛出异常

    throws通常用于方法声明方方法中可能存在异常却不想在方法中对异常进行处理就可以在声明方法时使用throws声明抛出的异常(让调用者来处理该异常)。若需要throws声明抛出多个异常各异常之间用逗号分隔

    数据类型方法名(形参列表) throws 异常类1, 异常类2... {

       方法体

    }

    1).数据类型基本数据类型或对象类型

    2).方法名: Java语言的合法标识符

    3).throws: 抛出异常的关键字

    4).异常类: Java语言的异常类或自定义异常类

    5).方法体该方法需要执行的语句

2).使用throw语句抛出异常

    在通常情况下程序发生错误时系统会自动抛出异常而有时希望程序自行抛出异常可以使用throw语句来实现。throw语句通常用在方法中在程序中自行抛出异常

    throw new Exception("对异常的说明")

    1).throw: 抛出异常的关键字

    2).Exception: 异常类(可以是自定义的异常类)

 

 

17.5 自定义异常

自定义异常

    对于角标是整数不存在,可以用角标越界表示,对于负数为角标的情况,准备用负数角标异常来表示。

    Java没有定义负数角标这种异常那么可以将负数角标进行自定义描述并封装成对象

【注:如果让一个类称为异常类必须要继承异常体系因为只有称为异常体系的子类才有资格具备可抛性才可以被两个关键字所操作, throws throw

1).创建自定义异常类

    创建自定义的异常类需要继承自Exception并提供含有一个String类型形参的构造方法该形参就是异常的描述信息可以通过getMessage()方法获得例如:

public classNewException extendsException {

    publicNewException(String s) {

       super(s);

    }

}

    自定义异常类NewException, 也就是说NewException是自定义异常类的名称该类继承自Exception该类构造方法的形参s是需要传递的异常描述信息该信息可以通过异常类的getMessage()方法获得

2).使用自定义异常类

    使用自定义异常类可以通过throw语句抛出异常

try {

    ...

} catch (NetException e) {

    throw new NetException("异常描述");

}

3).异常的使用原则

    使用异常可以捕获程序中的异常但是异常的使用也要遵循一定的规则下面是异常类的几项使用原则:

    1).不要过多地使用异常这样会增加系统的负担

    2).在方法中使用try...catch语句块捕获异常时要对异常作出处理

    3).try...catch语句块的范围不要太大这样不利于对异常的分析

    4).一个方法被覆盖时覆盖它的方法必须抛出相同的异常或子异常

 

转载于:https://my.oschina.net/vwFisher/blog/2209625

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值