黑马程序员技术交流社区
标题:
反射。
[打印本页]
作者:
王德升
时间:
2012-7-13 19:46
标题:
反射。
本帖最后由 王德升 于 2012-7-14 20:17 编辑
一:
package cn.itcast.day01;
public class StaticImport
{
public static void main(String[] args)
{
int x = 1;
try {
x++;
} finally {
System.out.println("haha");
System.out.println("hahaha");
}
System.out.println("你好,我的Ecs"+x);
}
//为什么我在这里导入syso然后按ALT+/就倒不出来呢?
}
二:
package cn.itcast.day01;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abc";
Class cla1 = String.class;
Class cla2 = str.getClass();
try
{
Class cla3 = Class.forName("java.lang.String");//这句话为什么会有异常呢?
}
catch(Exception e)
{
throw new RuntimeException("出错了");
}
System.out.println(cla1 == cla2);
try
{
System.out.println(cla1 == cla3);//这句话还会报异常
}
catch(Exception e)
{
throw new RuntimeException("不对啦");
}
}
}
//我这样写为什么还会报错?
作者:
黑马振鹏
时间:
2012-7-13 20:12
本帖最后由 黑马振鹏 于 2012-7-13 20:16 编辑
package cn.itcast.day01;
public class StaticImport
{
public static void main(String[] args)
{
int x = 1;
try {
x++;
} finally {
System.out.println("haha");
System.out.println("hahaha");
}
System.out.println("你好,我的Ecs"+x);
}
//为什么我在这里导入syso然后按ALT+/就倒不出来呢?
这里在主函数的外面,如果写语句的时候,只能是写个函数().并不能直接写输出语句。
}
第二个异常主要是字符串可能输入错误导致的。
作者:
何旭栋
时间:
2012-7-13 20:21
package cn.itcast.day01;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abc";
Class cla1 = String.class;
Class cla2 = str.getClass();
try
{
Class cla3 = Class.forName("java.lang.String");//这句话为什么会有异常呢?
//通常classpath不正确或者jdk版本不对都可能出现异常啊
}
catch(Exception e)
{
throw new RuntimeException("出错了");
}
System.out.println(cla1 == cla2);
try
{
System.out.println(cla1 == cla3);//这句话还会报异常
//cla3是局部变量,在这里是无法访问的
}
catch(Exception e)
{
throw new RuntimeException("不对啦");
}
}
}
作者:
张天天
时间:
2012-7-13 20:40
方法怎么能写在类里面呢。。。
方法之间的调用都是通过方法的
就是说在方法中才能调用另一个方法
所以那样写是错的,当然不给提示
forName方法接收字符串参数时,该参数必须为完整的类路径,
包括包名一定要加上,否则找不到的
Class cla3;把这个写在try块的外面,
在里面定义在外面的使用不了的,呵呵
作者:
陆强强
时间:
2012-7-14 00:11
try
{
Class cla3 = Class.forName("java.lang.String");// Class.forName里面要全名的,如果类型不匹配就是ClassNotFoundException
}
try
{
System.out.println(cla1 == cla3);//cla3是class.forName()得来的,所以要抓或者抛异常。如果一个方法有异常,那所有调用它的语句都要抓或抛异常,至于楼上说的变量在里面是编译时错误,不是异常
}
作者:
柯玲
时间:
2012-7-14 18:41
参考JDK上的描述:public static Class<?> forName(String className) throws ClassNotFoundException 说明已定义在应用此方法时会出现ClassNotFoundException异常,所以我们在调用此方法时必须将异常抓住或抛出;
System.out.println(cla1 == cla3);此句编译都不会通过,原因是cla3不像cla1一样,处在全局变量的位置,所以无法引用到cla3,要想引用到cla3,cla3必须声明一个引用到try语句外面,那么此处抓异常就是不必要的动作了。
下面是我写的优化代码:
public static void main(String[] args) {
String str = "abc";
Class cla1 = String.class;
Class cla2 = str.getClass();
Class cla3 = null;
try {
cla3 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
System.out.println(cla1 == cla2);
System.out.println(cla1 == cla3);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2