java从0单排之<<java就业培训教程>>复习与面试题回顾——03

本文深入探讨了面向对象编程的基本概念,包括对象比较、构造方法、垃圾回收、内部类应用以及静态变量的作用。通过Java代码实例展示了==和`equals()`的区别,对象的创建过程,以及如何在类中利用内部类实现资源共享。同时,解释了如何通过`System.gc()`强制垃圾回收,以及静态变量和方法的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三章:面向对象(上)
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();
          }
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值