java从0单排之复习与面试题回顾——03

第三章:面向对象(上)
1.对象的比较,即“==”和equals()方法,”==“用于比较两个变量的值是否相等,equals()用于比较两个对象的内容是否一致。
    public class StringDemo4 {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1==s2);//false
        System.out.println(s1.equals(s2));//true
         
        String s3 = new String("hello");
        String s4 = "hello";//在方法区有这个常量值
        System.out.println(s3==s4);//false
        System.out.println(s3.equals(s4));//true
         
        String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5==s6);//true
        System.out.println(s5.equals(s6));//true
    }
 
}

    public class StringDemo5 {
    public static void main(String[] args) {
        String s1  = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        System.out.println(s3==s1+s2);//false(s1和s2是两个变量是先开空间再拼接在一起,所以不和s3地址值一直)
        System.out.println(s3.equals(s1+s2));//true
        System.out.println(s3=="hello"+"world");//true(因为"hello"和"world"是常量,所以先拼接再去找有没有这个拼接后的常量,发现有,s3所以相等)
        System.out.println(s3.equals("hello"+"world"));//true
     
        //通过反编译看源码,我们知道这里已经做好了处理
//      System.out.println(s3=="helloworld");
//      System.out.println(s3.equals("helloworld"));
    }
 
}

  
2.A a=new A(”tom“);具体过程: 栈内存中定义句柄a,堆内存中创建A的对象,属性使用默认初始化的值,然后调用A的构造方法,进行属性的赋值(所以构造方法被调用时,对象已经产生),然后a指向A对象。

3.finalize()方法是在对象被当成垃圾从内存中释放前调用,而不是对象变成垃圾前调用。由于java的垃圾回收器不定时启动,所以不能确定什么时候调用finalize()方法。如果不启动,就不会调用finalize()。为此,java中提供了一个
    System.gc()方法来强制启动垃圾回收器。

4.所以我们不能在任何方法体内的变量声明为静态。

5.类是在第一次被使用的时候才被装载的,而不是在程序启动时就装载程序中所有可能要用到的类。static修饰的变量,方法,代码块都是和class绑定的,和对象的创建无关,所以无论创建几个对象,他们都只被执行一次。

6.当A类中的程序代码要用到B类的实例对象,而B类中的程序代码又要访问A类中的成员,将B当做A的内部类是很有效的解决办法。一个内部类可以访问它的外部类的成员,反之不成立。
    class Outer
    {    
        int out_i=100;
        void test()
        {
            Inner in=new Inner();
            in.display();
        }

        class Inner()
        {
            void display()
            {
                System.out.print(out_i);
            }
        }
    }
    class Demo
    {
        public static void main(String [] args)
        {
            Outer out=new Outer();
            out.test();
        }
    }
(这里笨小葱想起一道笔试题,启动4个线程,对于整数i,2个线程每次+1操作,2个线程每次-1操作。当时就是使用的内部类的程序代码)


7内部类如何被外部引用,只需将内部类申明为pulic。
    class Outer
    {
        private int size=10;
        public class Inner
        {
            public void  test()
            {
            System.out.print(size);
            }
        }
    }
    
    class Demo
    {
        public static void main(String [] args)
        {
            Outer out=new Outer();
            Outer.Inner in=out.new Inner();
            in.test();
        }
    }

发布了35 篇原创文章 · 获赞 15 · 访问量 13万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章