Java-Finalize(GC)和类与类和接口之间的关系

关于java中的toString方法

/*
关于 object中的 tostring方法
sun在 object类中设计 tostring方法的目的:返回java对象的字符串的表示形式
 在现实开发中, object里边的 tostring方法已经不够用了
 object的 tostring方法实现的结果不满意object中的 tostring方法就是要重写的
 sun是这样子实现 tostring方法的
 public string tostring(){
     return getClass().getName() + "@" + Intger.toHexString(hashcode());
 }
 Object中的toString方法返回:类名@Java对象的内存地址经过哈希算法得出的int类型值
 再转换成十六进制
 这个输出结果可以等同看做Java对象在堆中的内存地址
 */
//创建一个Object类型的对象
Object object = new Object();
System.out.println(object);//java.lang.Object@47089e5f
//调用一个toString 方法
System.out.println(object.toString());//java.lang.Object@47089e5f

Person person = new  Person("Steven",18);

//调用toString方法
String pStr = person.toString();
System.out.println("person = " + pStr);
class  Person {
     String name;
     int age;

     Person(String name , int age){
          this.name = name;
          this.age = age;
     }
     //重写toString方法
     //根据项目的需求而定
     //需要显示格式:Person[name=Steven,age=18]
     public String toString(){

          return "Person[name="+name+",age="+age+"]";//person = Person[name=Steven,age=18]
     }

}

1.垃圾回收机制

finalize[ˈfaɪnəlaɪz] //完成,使结束 类似OC dealloc

垃圾回收器( Garbage Collection),也叫GC,垃圾回收器主要有以下特点

◆当对象不再被程序使用时,垃圾回收器将会将其回收

◆垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他,尽快回收资源(System.gc和 Runtime.getRuntime().gc())

◆垃圾回收器在回收某个对象的时候,首先会调用该对象的 finalize方法

◆GC主要针对堆内存

◆单例模式的缺点

 

 finalize方法什么时候调用

 1.finalize方法每一个JaVa对象都部有

 2. finalize方法不需要程序员去调用,有系统自动调用

 3.Java对象如果没有更多的引用指向它,则该Java对象称为垃圾数据等待垃圾回收器回收,垃圾回收器在回收这个Java对象之前会自动调用该对象的finalize方法

   @Override
    protected void finalize() throws Throwable {
       super.finalize();
    }
 People people = new People();

 //没有引用再指向他,等待回收
 people = null;
 //开发者只能"建议"垃圾回收器回收垃圾
 System.gc();


class People {
     protected void finalize() throws Throwable {
          System.out.println(this + "马上就要被回收了 ~!");//People@18317cb3马上就要被回收了 ~!
          People p = this;//让引用再次指向该对象,该对象不是垃圾数据,不会被垃圾回收器回收!
     }
}

2.类与类和接口之间的关系

①.类与类的继承关系

public class Animal {

}

class Dog extends Animal{//Dog is a Animal

}

②类与接口之间的实现关系

public interface I {
    public void method01();
}
// is - like - a 类与接口之间的关系: 实现
class A implements I {//A is like I

    public void method01() {
         //实现
    }
}

③类与类之间的关联关系

//类与类之间的关联关系:
public class B {//B has a c
    private C c;
}

class  C{

}

包其实就是目录,特别是项目比较大,java文件特别多的情况下,我们应该分目录管理,在Java中称为分包管理,包名通常采用小写

  1.包最好采用小写字母

  2.包的命名有规则,不能重复

//package 必须放到 所有语句的第一行,注释除外。

软件的包机制

  1.解决的类的命名冲突问题,在类名前加命名空间(包机制)

 

  2.在Java中使用package语句定义包。(单包,复包)

 

  3.package语句只能出现在.java源文件的第一行

 

  4.package定义的格式,通常使用公司域名倒序输出方式

  顶级域名:tanzhouedu.com

  一级域名:www.tanzhouedu.com

  二级域名:soft.tanzhouedu.com

  三级域名:java.soft.tanzhouedu.com

  XX级域名:xx...

 

  二级目录:tanzhouedu.com/java

 

  com(企业公司).tz(公司名).until(业务模块名称)

 

   package定义格式:公司域名倒序.项目名.模块名

 

  5.完整的命名是带有包名的

  package com.tz,javase.pak.package_import;

 

 

  6.带有包结构的如何运行程序

  java com.tz.javase.pak.Student

  类装载器 后面跟 类名

  javac Java的编译器后边跟路径

 

  import java.util.Date;

 

  public class Config {

 

    public static void main(String[] args) {

 

         java.util.Date d = new java.util.Date();

 

         System.out.println("日期:"+d);

    }

 

  }

  7.

  import com.tz.javase.pak.*;//导入pak里边的所有类

  import语句只能出现在package语句之下,class定义之上

 

  8.JDK常用包

  java.lang ,此包Java 语言标准包,使用此包中的内容无需import导入

  java.sql提供了JDBC接口类

  java.util提供了常用工具类

  java.io,提供了各种输入输出流

 

java访问级别修饰符

private protected public 限定其他类对该类、属性和方法的使用权限

private 只能在本类中访问

缺省: 本类,在同一个包下可以访问,其他不行

protected:本类,同一个包下,子类都可以访问,不同包,不行;

public :任何位置都可以

猜你喜欢

转载自www.cnblogs.com/StevenHuSir/p/Java_Finalize_GC.html
今日推荐