下面几个问题不要闲多哦 只是希望前辈能好好分析下面几个问题,这几个问题困扰了我好久,本来还有好多个,写的时候都一时想不起来了,希望前辈能好好分析下哦O(∩_∩)O~1:在泛型中Class<Class>怎么理解啊?如果前面一个是像list,set之类的可以理解为装的什么类型,可是两个都是普通的自定义类,如Cat<Dog>,何解啊2:Java中“Class.forname”“.class”.....之类的关于反射用的如何通俗理解啊(还有几个忘了名字,希望前辈列出哦)3:java线程不是有同步吗?同步就是一起的意思,可是synchronize的目的只让一个运行,这个还叫同步吗?始终没弄懂!异步又是怎么通俗讲呢?4:我遇到这个:Method throws XXX{} 异常中方法throws异常后什么都不管了,也不Catch处理,为什么啊?
这是你理解错了,java中的同步意思是不能同时做一件事情!比如你去银行办理手续,前面的人没有办理完,你是不可以办理的,有时候程序只能供一个对象访问,所以就用同步来限制。异常:
throws后,并不是什么都不管了,而是有另外的东东处理这个抛出的异常。
你问是谁处理的?哪个调用这个方法的,哪个就处理这个抛出的异常。
运用throws的其中一个原因是:有时候程序不适合在当前的程序中进行异常处理,所以会将异常抛出,留给适合的地方处理这个异常。祝楼主好运.
1.泛型更加安全,进行了类型检查,就像C++里的模板;
有了泛型,取出来就不用强制转换了
2.可以看看反射机制,Class.forName(name),就是找到name.class 并实例化
3.synchronize就是锁住对象
4.throws就是交给上一级去解决,如果一直throws,最后那一级要解决,要catch的
List<String> list = new ArrayList<String>();
定义了一个List,它包括的每一个元素都是String类型。这样的话,这个List就固定只能用来装载String型的变量。有了这个基础以后,你就不必做下面这样的强制类型转换了:
String temp = (String)list.get(1);
取而代之的是这样:
String temp = list.get(1);
至于为什么会有这个泛型,那学问太大了。你记得怎么用就行。2.如果你接触过JDBC的话,你不会对下面的代码感到陌生:
Class.forName("oracle.jdbc.driver").newInstance();//我凭记忆写的,可能不太准确。
如果你接触过JavaBean的话,也不会对下面的代码感到陌生:/*摘自:Spring 开发指南*/
Class cls = Class.forName("net.xiaxin.beans.User");
Method mtd = cls.getMethod("setName",new Class[]{String.class});
Object obj = (Object)cls.newInstance();
mtd.invoke(obj,new Object[]{"Erica"});
return obj;可能你在运行的时候要去根据配置文件获得数据库的类型,然后加载不同的驱动。
也有可能你想遍历JavaBean所有的属性……
Java的反射机制让这一切都变得可行。3.多线程,说实话,我也不老精的。但是同步,貌似不是你理解的那样。4.有的时候,在方法里catch异常并不是好的处理方式。
比如,你想做一个计算表达式的值的Java Application(也就是一个计算器,输入表达式,计算出结果)。你肯定会做四个方法:加减乘除。每个方法都会有一个返回值。其中,除法运算有可能会抛异常(除数为0)。那么,如果你在做除法的那个方法中捕获了异常的话,外部方法中并不知道异常的发生,所以将你的返回值作为正确的结果来处理。这样的话,计算结果就不对了。反之,如果你将异常往外抛的话,外部方法中检测到异常,可能会在用户界面上打印error信息。很显然,在除运算的方法中处理异常是不明智的。
E value; Cell(E v) {
value = v;
} E get() {
return value;
} void set(E v) {
value = v;
}
}
2.每一个类都有一个Class类型的对象,就是 Class cls = 类名.class,这个对象表示正在运行的java应用程序中的类和接口.Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。这个类定义了一些方法,通过这些方法可以得到这个类的一些信息, 具体参考java API帮助文档.3.同步并不是同时的意思.这里可以理解为使用synchronized关键字给方法加锁.至于synchronized怎么翻译,应该是有历史原因的.4.某个方法只抛出异常,这个方法有什么用呢,用处就是抛出异常.哈哈,估计你看的是举例说明throw用法的.
举个例子:验证用户名的方法checkUserName(),当验证未通过时,throw UserNameErrorException(用户自定义异常),抛给谁了呢?谁调用这个方法就抛给谁,至于调用checkUserName方法怎么处理这个异常,checkUserName不管,你返回给用户一个字符串消息也好,让他重新登陆也好由调用者自己决定.
public class Dog {
public String name;public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
}
public class Cat<E extends Dog> { public String getDogName(E e){
return e.getName();
}
public void setDogName(E e,String name){
e.setName(name);
}
public static void main(String[] args){
Cat<Dog> cat=new Cat<Dog>();
Dog dog=new Dog();
cat.setDogName(dog, "wangwang");
System.out.println(cat.getDogName(dog));
}
}