Java SE 自学笔记7 之面向对象2

Object 类的简单特征


     一切类都是 Object 类的子类。


★ toString()方法:负责返回该对象的“描述型字符串”
当 “打印输出”一个对象时,实际就是打印输出该对象的 


toString()方法的返回值;
Object 类提供的 toString()方法,返回值是“类名@hashcode”值,大多时候, 需要程序员重写 toString()方法。




★★ boolean equals(Object obj)
     -- 此方法用于按“程序自己的规则”(即按程序员重写的方法的规则)来判断两个 对象 是否相等。


重写equals()方法的一般标准( 非必须):
    1.如果当前对象与被比较对象本身就形同,一般直接返回true;
    2.一般要求当前对象与被比较对象的类型和关键属性相同时才返回true




【 == 符号】
       用于判断两个基本类型的变量(表达式/直接量)的值是否相等

    1.当比较基本类型的值时,程序并不管其数据类型,之比较实际值的大小,例如:


System.out.println('A' == 65.0 );  -- 结果返回 true
System.out.ptintln('0' == 0.0  );  -- 返回false (字符0     


                                              的实际值为48)

    2. 如果是引用类型的变量(不包括 包装类 ,因为 包装类 可以自动拆箱),要求被比较的两个引用变量,引用同一个实例(或者说是引用实例的

地址形同)才返回true;


    例如:
        String s1 = new String("Hello");
        String s2 = new String("Hello");
        System.out.println(s1 == s2);


        -- 运行结果为 false

  s1 和 s2 都是 new 出来的对象,二者在内存中的地址不同即引  用的不是同一个实例;

改为以下才会返回 true :


        String s1 = new String("Hello");
String s2 = new String();
s2 = s1;   //将s1 和 s2 指向同一个实例
System.out.println(s1 == s2);


【 static关键字 深入详解
     1.static 只是一个标识
有 static 修饰,表明被修饰的成员属于类
没有 static 修饰,表明是属于实例
     
     2.static 成员(Field、方法、初始化块)都与类“共存亡”;
static成员建议通过类名来访问,以增强程序可读性(因为用实例  


      访问static成员的是指还是通过类名来调用);
   
     3.必须先有类,再有对象
可以存在JVM有类但是没有实例的情况,但是绝不可能出现有了该类  的实例却没有该类;
     
     注意:
 -- static成员不允许访问非 static 成员(静态成员不能访问非  静态成员)
 -- this引用和super都不允许出现在static方法中
 -- 当程序直接访问一个Filed时:
    如果Field是实例Field,相当于省略了 this;

    如果Field是类Field,相当于省略了 类名;



【单例类及其实现】
  单例类 -- 只允许创建一个实例的类;


  单例类的实现:
1.构造器不能暴露,否则可以通过 new创建很多实例;
2.暴露一个方法,由该方法来获取实例,因为在调用该方法之前肯定不存在实例,所以只能通过类来调用该方法,因而该方法必须用static修饰;
3.使用静态Field来“缓存”已有的实例;在每次获取实例之前,先 是否已“缓存”过实例,如果没有则创建;


  例:
public class SingleTon 
{
private SingleTon(){}  //隐藏构造器
private static SingleTon st; //创建“缓存”变量
public static SingleTon get()  //暴露一个返回值为一个实例的方法
{
if(st == null)   //判断“缓存”是否存在
{
st =new SingleTon();
}
return st;    //返回实例
}
public static void main(String[] args) 
{
//通过类来调用方法创建实例s1
SingleTon s1 = SingleTon.get(); 
//通过类来调用方法创建实例s2
SingleTon s2 = SingleTon.get(); 
//运行结果为 true,说明 s1 == s2 ,即实际上是指创建了一个实例
System.out.println(s1 == s2); 

                           
}
}

你可能感兴趣的:(Java,Java,SE,toString方法,equals,单例类及其实现)