下面几个问题不要闲多哦  只是希望前辈能好好分析下面几个问题,这几个问题困扰了我好久,本来还有好多个,写的时候都一时想不起来了,希望前辈能好好分析下哦O(∩_∩)O~1:在泛型中Class<Class>怎么理解啊?如果前面一个是像list,set之类的可以理解为装的什么类型,可是两个都是普通的自定义类,如Cat<Dog>,何解啊2:Java中“Class.forname”“.class”.....之类的关于反射用的如何通俗理解啊(还有几个忘了名字,希望前辈列出哦)3:java线程不是有同步吗?同步就是一起的意思,可是synchronize的目的只让一个运行,这个还叫同步吗?始终没弄懂!异步又是怎么通俗讲呢?4:我遇到这个:Method throws XXX{} 异常中方法throws异常后什么都不管了,也不Catch处理,为什么啊?

解决方案 »

  1.   

    同步:
    这是你理解错了,java中的同步意思是不能同时做一件事情!比如你去银行办理手续,前面的人没有办理完,你是不可以办理的,有时候程序只能供一个对象访问,所以就用同步来限制。异常:
    throws后,并不是什么都不管了,而是有另外的东东处理这个抛出的异常。
    你问是谁处理的?哪个调用这个方法的,哪个就处理这个抛出的异常。
    运用throws的其中一个原因是:有时候程序不适合在当前的程序中进行异常处理,所以会将异常抛出,留给适合的地方处理这个异常。祝楼主好运.
      

  2.   

    1.你的Cat类应当是一个集合类才能这样。2.反射是可以根据类的名字是生成一个类的实例。3.同步表示让多个线程顺序的去做同一件事情,异步表示多个线程可以并发的去做事情。4.throw出去以后,由上一级的方法去处理这个异常,本方法不需要在catch处理。
      

  3.   

    2L说得很好了,我补充点
    1.泛型更加安全,进行了类型检查,就像C++里的模板;
      有了泛型,取出来就不用强制转换了
    2.可以看看反射机制,Class.forName(name),就是找到name.class 并实例化
    3.synchronize就是锁住对象
    4.throws就是交给上一级去解决,如果一直throws,最后那一级要解决,要catch的
      

  4.   

    1.举如下的例子分析:
    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信息。很显然,在除运算的方法中处理异常是不明智的。
      

  5.   

    1、关于同步,没有绝对的同步,我们说的同步是,在同一段时间内可以同时运行几个不同的线程或者进程,或者应用程序,各种所谓的并发、并行、多线程,都是类似的意思。当我们要精确到某一刻时候,CPU还是只能运行一个任务,因为CPU是按照CPU时间片来分配给各个进程或线程的。请记住,同步是指表明上宏观上体现出来的同步,而不是绝对的同步;2、关于throw,如果一个方法中将异常throw抛出,这个异常将由调用这个方法的方法或者类(其中默认的处理异常的方法)来处理,并不是没有人管, 就算一个RuntimeException没,你没有管它,到最顶层是交给Object来处理,最后会被当做一个Exception来处理。但是,根据经验,这种处理异常的方式是不负责任的,最好在内部进行处理,或指定特定的类或者方法来处理。初学者最好使用try-catch block来处理,到以后你可以用异常来进行编程,以及在web中用Filter来进行异常处理。3、关于泛型,请参考5楼的,说的比较易懂;泛型的内容很多,也很深刻;4、反射是通过类名、方法等获取关于他们的非常非常详细的信息,关于反射,也是比较难的一内容;
      

  6.   

    1.可以这样用class Cell<E> {
    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不管,你返回给用户一个字符串消息也好,让他重新登陆也好由调用者自己决定.
      

  7.   

    1. #2的第一点说的有误,范型不是只能用在集合上的,#8已经提供例子了.2. 建议看看java的类型识别.3. 建议找操作系统的书看看进程管理的内容,不要给"同步"这个字面弄糊涂了.(不是"步伐相同地去做")4. 建议看看java的异常处理.
      

  8.   

    1.
    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));
    }
    }