1、JAVA有以下方法修饰符:public,protected,private,final.....等,public,protected,private是访问权限,如果某方法如下定义为final int ast(),该方法的访问权是什么?如果没有设置访问权,默认的属性和方法的访问权是什么?
2、C++中可以采用全局变量和函数在不同类之间传值,在JAVA中,跨类传值是如何实现的?
3、JAVA中static修饰符,按照C++中的情况,有该修饰符的方法或变量,在程序初始化时,相应的方法或变量被初始化,是这样的吗?如果是,那么,假设在相当时间内,该方法或变量没有被有效引用,根据JAVA的垃圾回收机制,该类将被清除,现在的问题是,假设由于有static关键字,该类不能被回收,那么,在该程序退出后,该类使用的内存无法释放给系统,造成内存泄漏;如果该类能回收,回收后,如果某个类要使用该类的某个方法或变量,得重建该类,static关键字失去其作用?
4、"当垃圾回收器要释放无用对象的内存时,要先调用该对象的finalize()方法。"这是否意味着,任何类都得定义finalize()方法,用于处理如关闭文件这样的操作。如果不是这样,某个类不定义该方法,那么,在释放该类时,垃圾回收器还要调用该对象的finalize()方法吗?默认的该方法实现了那些功能。
5、书中有一个例子,如下:
 abstract class dh
{
abstract void method();
void method1()
{
System.out.println("dh类中的方法");
}
}
class uu extend dh
{
void method()
{
System.out.println("uu类中的方法");
}
}
//主类
public class ex_3_4
{
public static void main(String args[])
{
dh vb=new uu();//************!不解?vb.method();
vb.method1();
}
}dh vb=new uu();
该语句将对uu类的一个引用返回给dh的一个实例,怎么可以这样的使用,假如有类“狗“和“树“
两个类,将对“狗”类的引用传递给“树“,我不知道他们之间有何可传递性?假如在uu类中还定义了一个方法void huiop();那么,使用vb.huiop()出现什么结果?

解决方案 »

  1.   

    1 。访问控制符没有 final吧??虽然我也是初学。。2.不会什么叫跨类。。3.很多人都说。哪个回收的机制是垃圾来的。。4.不会。5.抽象的方法只需生命。而不需实现。抽象方法在子类中必须被实现。。所以是dh vb=new uu();我的理解就是这样。。我也是初学。。有什么不对的地方还请指教。。
      

  2.   

    1:
    final class Test
    不允许扩展的类称为final类(防止别人继承Test类,final类的所有方法都自动是final的)final String getName()
    如果一个方法被定义为final,那么该类的子类就不能覆盖这个方法final String name="OK" 
    final字段必须被初始化,必须保证在构造器结束之后它的值已被决定,设定后这个字段的值不能再修改把类和方法设定为final有两个原因
    1是效率 (动态绑定比静态绑定开销要大)
    2是安全 (动态分配机制的灵活性也意味着你无法控制方法调用时所发生的事情)如果没有设置访问权,默认的属性和方法的访问权是protected
      

  3.   

    public class A
    {
        private String name="OK";
        
        public String getName()
        {
            return name;
        }
    }
    ///////////////////////////////////
    class B
    {
    public static void main(String[] args)
    {
    A a=new A();
    String b=a.getName();
    System.out.println(b);
    }
    }是这个意思吗?
      

  4.   

    hujiaboy(▲▲▲▲▲▲) 如果某方法如下定义为final int ast(),按你的说法,他的访问权限应该是protected吧!
      

  5.   

    dh vb=new uu();dh是uu的父类!“狗“和“树“这个比喻并不恰当!应该是“树”和“苹果树”“苹果树”是树的一种也就是书中所说的向上转型而如果写成uu vb=new dh();则不行 “树”不一定都是“苹果树”
      

  6.   

    1. 默认的包内访问, 也就是同一个包内的类才看一看到它。
    2. 没有直接的,main 方法是起点, 你当然也能用 单例来共享变量。3. static 变量作用范围在一个ClassLoader,当这个类 需要被加载时JVM 就会去用一个加载器加载它(有点象DLL,但是限于一个ClassLoader), 垃圾回收是回收对象所占用的内存, Class 本身并不是和普通对象一样。 当 程序退出了 整个 JVM 所分配到的内存都会交还操作系统,当然这也包括static 那部分,不存在漏掉的。4. Object 已经包含了 protected  void finalize() 方法,所以你自己不写一个没关系,用默认的(final 类的方法全都是 final 的, 不是 final 的方法全都是 Virtual 的)。 看源码发现 finalize 里面什么都没有 ^_^ . 给你的茅坑想拉就拉。当然要求:如果你自己写了个 finalize() 最后应该调用 super.finalize();5. 这不是跟 C++ 指针很类似么?  dh 中能看到 method, method1 2个方法,所以你能调用他们,“/“狗”和“树”之间有“传递性” /”是因为他们有继承关系。
    但是 huiop 没有出现在 dh 中, 所以你必须 Cast Down 才能调用,然而当你 CastDown 时,对象的实际类型不是你想要的就会得到一个 ClassCastException , 也就是说你不可能  vb.huiop();
      

  7.   

    访问权限只有3中
    public 
    private 
    protected
    在默认不提供的情况就既是protected
      

  8.   

    4、"当垃圾回收器要释放无用对象的内存时,要先调用该对象的finalize()方法。"这是否意味着,任何类都得定义finalize()方法,用于处理如关闭文件这样的操作。如果不是这样,某个类不定义该方法,那么,在释放该类时,垃圾回收器还要调用该对象的finalize()方法吗?默认的该方法实现了那些功能。
    Object定义了finalize()方法,而它是所有java class的父类.--------------------------------------------------------------------
    to: hujiaboy
    访问权限只有3中
    public 
    private 
    protected
    在默认不提供的情况就既是protected
    ------------------------------------------
    访问权限4种
    public
    private
    protected
    包访问
    在默认不提供的情况就既是包访问
      

  9.   

    3Q greenmars2004(火球) 
    由于protected也有包访问权限
    我习惯了加protected
      

  10.   

    hujiaboy(▲▲▲▲▲▲) :
    dh vb=new uu();dh是uu的父类!“狗“和“树“这个比喻并不恰当!应该是“树”和“苹果树”“苹果树”是树的一种也就是书中所说的向上转型而如果写成uu vb=new dh();则不行 “树”不一定都是“苹果树”-------------------------------------------------------------------------------
    如你所说:
    dh 是树
    uu 是苹果树,
    dh 中的虚方法method()应该是全部树的一个方法,应该在dh中定义,为何在uu (苹果树)中定义,
    在uu (苹果树)中只能定义苹果树特有的方法。如此说,不能有纯虚类了,而实际上不是这种情况。纯虚类是有的.
      

  11.   

    abstract class 人
    {
        abstract void 走路();//小孩,中年人,老人 都有各自的走路,在父类中如何实现是好?
    }
    ////////////////////
    class 小孩extends 人
    {
        void 走路()
        {
             System.out.println("小孩如何走");
        }
    }
    /////////////////////
    class 老人 extends 人
    {
        void 走路()
        {
             System.out.println("老人如何走");
        }
    }
      

  12.   

    hujiaboy(▲▲▲▲▲▲) :dh vb=new uu();
    子类的一个引用给父类,将苹果树的属性给树,有何意义?
    abstract void method();
    为何父类的一个虚函数的调用会使用子类的一个实现方法?我认为vb.method()应该无输出才是啊!
      

  13.   

    dh vb=new uu();
    你可以看成是
    dh vb;  //声明一个类型是dh的对象变量
    vb=new uu();  //苹果树是树的一种,uu当然可以指向dh了
      

  14.   

    dh vb=new uu();
    就是
    uu vb=new uu();睡觉去鸟~
      

  15.   

    -------------------------------------------------------------
    如果没有设置访问权,默认的属性和方法的访问权是protected
    -------------------------------------------------------------
    访问权限只有3中
    public 
    private 
    protected
    在默认不提供的情况就既是protected
    --------------------------------------------------------------
    我说错了!
    正解是
    greenmars2004(火球)所说访问权限4种
    public
    private
    protected
    包访问
    在默认不提供的情况就既是包访问zzzzzzzzzZZZZZZZZZZZZZZZZZZ
      

  16.   

    我查资料了,如果没有设置访问权,默认的属性和方法的访问权是friendly,它不是java的关键字
      

  17.   

    1.设置为final  就是该方法不能再被 覆写了
      
      如果没有设置 默认是package权限
      
    2.其实在java中通过用static修饰 变量和方法  可以实现类似
      c/c++中的全局变量和全局函数  但是这样就破坏了类的封装
    3.程序运行 static周期是整个程序周期
      程序退出自然就会”回收“
      程序都退出了 怎么可能还有另一个类来使用static??
      如果是另一个程序中的类要使用同个static ,那么暂不会回收的
      
      再说java中的内存回收的时间也是不确定
      并不是 程序一结束全部内存会回收的
      垃圾回收器会根据算法在系统的合适时间运行回收
      这样保证了系统的性能
    5.上传嘛~有什么奇怪的
      

  18.   

    我来回答你的问题:
    1。default权限。同一个package可以访问。
    2。跨类传递变量通过你自己去构造条件。没有一定的规矩。
    3。当程序执行过程中第一次遇到某种类型时,要到classpath环境变量指定的位置搜索该类的字节马文件,并将其加载到jvm中,就在这时,系统会立即自动解析该字节马文件,找出该类中的static属性,并为其分配空间,并连续进行默认和显示初始化。
    4。任何类都不需要定义finalize()方法,在释放该类时,垃圾回收器还要调用该对象的finalize()方法。释放它所占的一切系统资源。
    5。
    纠正:class uu extends dh
    这个是很好理解的,子类类型的数据可以直接赋值给父类类型的引用变量,这是多态性的表现。
    同时,弗雷类型的数据可以被强制转换成其子雷的类型。
    这个叫做 对象造型。不是将对“狗”类的引用传递给“树“,而是将对“狗”类的引用传递给“老狗“278771497欢迎交流。
      

  19.   


    最近我系统的对着c++和java来学,觉得c++的确是让人着迷的东西,应且应用很广--高层和底层都很好.java除了跨平台,实在看不出特别精彩的地方.java的流行大部分是jsp等存在的原因. 关于你的问题我谈谈我的看法,
    1、JAVA有以下方法修饰符:public,protected,private,final.....等,public,protected,private是访问权限,如果某方法如下定义为final int ast(),该方法的访问权是什么?如果没有设置访问权,默认的属性和方法的访问权是什么?答:java有一个非常独特的特性:packpage!默认的就是package(本类和package可见)!2、C++中可以采用全局变量和函数在不同类之间传值,在JAVA中,跨类传值是如何实现的?答:java没有全局变量,但是可以定义一个全局变量表的类,此类只有final变量或者static变量.其他类import进来就可以使用了!c++用这个方法同样可以!3、JAVA中static修饰符,按照C++中的情况,有该修饰符的方法或变量,在程序初始化时,相应的方法或变量被初始化,是这样的吗?如果是,那么,假设在相当时间内,该方法或变量没有被有效引用,根据JAVA的垃圾回收机制,该类将被清除,现在的问题是,假设由于有static关键字,该类不能被回收,那么,在该程序退出后,该类使用的内存无法释放给系统,造成内存泄漏;如果该类能回收,回收后,如果某个类要使用该类的某个方法或变量,得重建该类,static关键字失去其作用?答:  不会造成内存泄漏,因为static是分配在类空间的(不是对象空间),所以它也不会失效.一个类只有一份static变量表.不属于任何一个对象.这在c++也是这样的!4、"当垃圾回收器要释放无用对象的内存时,要先调用该对象的finalize()方法。"这是否意味着,任何类都得定义finalize()方法,用于处理如关闭文件这样的操作。如果不是这样,某个类不定义该方法,那么,在释放该类时,垃圾回收器还要调用该对象的finalize()方法吗?默认的该方法实现了那些功能。答: 垃圾回收站不是万能的.finalize()方法是提供给对象自己清除自己的机会,但绝大部分都不用管的.按习惯关闭文件的工作不是在这里处理的.finalize都会调用的.除非资源是回收站无法控制的,才需要override这个的.finalize方法.例如c语言申请的空间....5、书中有一个例子,如下:
     abstract class dh
    {
    abstract void method();
    void method1()
    {
    System.out.println("dh类中的方法");
    }
    }
    class uu extend dh
    {
    void method()
    {
    System.out.println("uu类中的方法");
    }
    }
    //主类
    public class ex_3_4
    {
    public static void main(String args[])
    {
    dh vb=new uu();//************!不解?vb.method();
    vb.method1();
    }
    }dh vb=new uu();
    该语句将对uu类的一个引用返回给dh的一个实例,怎么可以这样的使用,假如有类“狗“和“树“
    两个类,将对“狗”类的引用传递给“树“,我不知道他们之间有何可传递性?假如在uu类中还定义了一个方法void huiop();那么,使用vb.huiop()出现什么结果?答: 这个不解,说明你对类类型变量的转换还不理解.尤其在c++,这是一个非常普遍,甚至是必然的用法.就好想很多基类传递的参数是Toject(类的祖先)一样.但uu objuu = new dh();就不行!
    你举的例子vb.huiop()会出现两种结果.
    1 如果dh类存在huiop()方法,如果是override的则执行uu的huiop()方法,否则执行dh类的huiop()方法.
    2 如果dh类没有huiop()方法,则会发生编译错误!除非坐这样的调用((uu)vb).huiop(),就可以了就目前感觉来说,觉得java相对高级一点,c++功能强大一点.c#跟java很相似.学这种特别高级的语言,不需要对内在的原理摸得太懂,所以很多人用了很久,都蒙蒙然!