J2SE堂上实例2.2Java抛出错误

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处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值