2.2Java抛出错误
错误逐层往上抛出
Throw
try,catch,finally sum+=
Integer.parseint() Class.forName() 用法
拓展:
(1)Integer.parseint()
Integer就是代表整型对象,parseInt就是一个转换方法。
Integer.parseInt(String)就是将String字符类型数据转换为Integer整型数据。
Integer.parseInt(String)遇到一些不能被转换为整型的字符时,会抛出异常。
str=bf.readLine() ;//bf是一个Buffer流,str是一个字符串
num=Integer.parseInt(str) ;//此处将str字符串转换为整型并存储到int类型的num中
//其作用在于,若读取的str不为整型,则会报错,可以抛出异常解决此问题
try{ str=brd.readLine() ;
num=Integer.parseInt(str) ;
}
catch(Exception e)
{
System.out.println("对不起,只能输入整数,请重新输入。") ;
}
//如此,再次输入h,a等非整型字符时,则会提示你输入整数
(2)Class.forName()
- Returns the {@code Class} object associated with the class or interface with the given string name.
要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。并返回与该类相关的Class对象。
Class t = Class.forName(“java.lang.Thread”);
提问:装载类我用new关键字就可以了,为什么我要用Class.forName()?
在回答该问题前让我们先来看看new关键字和Class.forName()的具体过程:
1.new 关键字:
当Java语法层面使用new关键字创建一个Java对象时,JVM 首先会检查这个new指令的参数能否在常量池中定位到一个类的符号引用,然后检查与这个符号引用相对应的类是否已经成功经历加载、解析和初始化等步骤,当类完成装载步骤之后,就已经完全确定出创建对象实例时所需的内存空间大小,接下来JVM将会对其进行内存分配,以存储所生成的对象实例。
2.Class.forName():
Class.forName()中传入的参数就是类的全限定名,JVM通过该全限定名首先检查该类是否已经被加载,若该类没有被加载则加载该类。并返回该类相关的Class对象。
3.通过上面的对比我们发现有几个地方Class.forName()可以很好的胜任工作而new关键字却不能:
Class.forName()的耦合度更低,因为它不需要在一开始import该类的全限定名,可以在配置文件中直接配置。这也是为什么很多框架都会使用Class.forName()的原因。
不需要该类的实例,只需要初始化该类时。如:数据库驱动
提问:Class对象是啥,要它能干什么?
Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等。其封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。Class类在很多地方都会用到比如反射等等,所以很多框架中也会很常见该类。
如果要深入学习,可以参看官方文档,或者点击该连接进行学习:https://www.cnblogs.com/bethunebtj/p/4680532.html
Math类
package javastudy;
public class Math {
public static int Add(String a,String b)//定义为静态,方便调用
{
try {
int sum=Integer.parseInt(a);
//sum=sum+Integer.parseInt(b);
sum+=Integer.parseInt(b);
return sum;
}
catch (Exception e) {
// TODO: handle exception
return -1;
}
}
public static void testit() throws ClassNotFoundException
{
Class.forName("aaa");
//"javastudy.test"不会报错可调用
}
}
test类
package javastudy;
public class test {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(Math.Add("100","101"));
Math.testit();
}
}
运行结果:
正确情况:输出a,b之和
错误情况 :输出-1
图1.Class.forName(“aaa”)
图2.抛出错误
图3.逐层向上抛出到主函数main,交给JVM处理