Object类,导包,访问权限修饰词,修饰词final,static,单例模式,抽象类

Object:是所有引用类型的顶级父类,
            系统都会默认使引用类型extends Object.
此类中提供了常用的方法:
1:toString():
           在Object中,返回的是类全名@HashCode值, 
           即对象的内存堆中的位置信息 
      
          【类有类名和类全名之分:
                 类名:即最短的名称
                 类全名:从包名开始写的名称
           如:  String 是类名
        java.lang.String是类全名                  
          】
  此方法会在输出变量时,或引用变量进行拼接时默认调用。
  
  而查看地址信息,通常没有必要,我们通常要查看的是
  对象的成员变量信息
 
 因此我们都需要重写toString()方法,用于查看对象的详情
  格式:
   "[成员变量1="+成员变量1+",成员变量2="+成员变量2+"]"

2:equals(Object obj)
  Object类型中的此方法中的逻辑是比较调用者this与形参obj
    的地址信息是否相等。
    简单说成:比较this与obj是不是同一个对象,对象的内容是

    否相等,成员变量是否相等。  
  
  所以在定义类型时,继承过来的equals方法 我们要重写。
  重写规则:
   (1)   查看传进来的obj是不是null
             if(obj==null){
                  return false;
             }
   (2): 查看传进来的obj是不是this.
         if(obj==this){
             return true;
         }
   (3)   查看穿进来的obj是不是本类型
            if(obj.getClass()!=this.getClass()){
                return false;
            }    
            可以改成
            if(!(obj instanceof Person)){
                return false;
            }
            
            
instanceof关键字:
     作用是判断引用变量指向的对象是否属于某一类型
    语法:
     boolean f =  变量名  instanceof  类型名
======================================================       
package: 包.  
        作用:用于管理源文件,区分类全名
        命名规则:域名后缀.域名.项目名.模块名
        声明位置:在源文件的首行首句。
     
     
     
     
        类全名:从包开始写起的名称
        
    常用的包:
    java.lang.*,因为里面的类型非常常用。因此不需要导包
    java.util.*,此包下封装了很多常用的工具类 
    java.io.*,此包下封装了io流的类型
    java.net.*,此包下封装很多关于网络的多种类型 

import: 导包关键字:
        在class之上,package之下。
        用于声明 类的 类全名,在逻辑中就可以使用短的类名。
        优点: 可以减少代码的书写。   

访问权限控制修饰词
    private,protected,public,默认的(default) 
    
    修饰类时:
        外部类:可以使用public和默认的
        内部类:可以使用public,protected,默认的,private
        
    修饰成员变量:四个都可以进行修饰       
                可见性不一样

               本类中  同包下   不同包子类中    其他    
public        true     true             true           true
protected   true    true             true
default       true    true
private       true


    在实际开发中,成员变量要尽可能的设置成不可见,
     好处是,提高代码的安全性。即用private修饰
    为了在其他类中可以对成员变量进行重新设置值或者获取值
    我们可以定义相应成员变量的共有方法来进行操作。
  
  public void setName(String name){
          this.name = name;//修饰成员变量的值
  }
  public  String  getName(){
          return name;
  }   
  
   修饰方法:
         与修饰成员变量的可见性一致。
         
    方法的重写:     
         子类不能重写父类的私有方法 

===========================================================
修饰词final:最终的,最后的

  (1)修饰类,
          被final修饰的,不能再有子类了。 
          意义在 减少随意扩展功能的可能性,减少对系统的危害        
  (2)修饰变量:只能进行初始化,不能再被赋值
               成员变量: 初始化的时机有两种
                        声明时同时初始化
                        在构造器中初始化  
               局部变量:使用前初始化即可
  (3)修饰方法: 不能被重写,意义在于: 可以避免某些子类"不经意"的重写     
       
       
修饰词static:静态
    1、修饰成员变量
       (1)修饰的成员变量,不属于对象的数据结构
       (2)静态变量属于类的,通常使用类名去调用
       (3)静态变量与类的信息一起存在方法区中,只存在一份,是
                对象的公共资源
    2、修饰方法
       (1)通常的方法都是与具体对象有关系,即对象的方法(行为)
       (2)如果是static方法则与对象毫无关系,是类的方法,通常用类名去调用
              常常与参数有关系
       (3)static方法内因为无法使用this关键字,因此不能直接访问非静态成员
       (4)static方法的作用一般都用于设计成"工具方法"和"工厂方法"              
    
              如:   Arrays.sort(数组名);
           Math.random();
           Math.sqrt(参);
           Math.abs(参);
           Math.sin(参数);
        3、static修饰代码块
       static{
            代码逻辑
       }
        
             静态块存储在方法区中,只加载一次,与对象无关。
             执行时机为加载类的信息期间,可以理解为在实
             例化之前
      
            作用:通常用于加载程序中所需要的静态资源:如:图片,音频,视频等       
-------------------------------
           非静态代码块与静态代码块,成员变量,方法都是
           类的成员
     {
     } 
    
          运行时机:在实例化之前执行,每次实例化之前都会执行一次      

常量:
     一般都是一些特殊值。
     一般都使用成员变量,修饰词为public static final
      声明时必须初始化
       命名规则: 字母全都大写
       如:   Math.PI

================================================================
设计模式之单例模式
          需求:在程序中的任何地方,我们想要获取某一个类的唯一对象。
                  我们称之为类的单例   
                  
                  
     Singleton
     (1)提供一个私有的静态的本类型的成员变量
     (2)构造器私有化
     (3)提供公有的静态的方法获取本类中创建的实例。
     
     饿汉写法:  加载期间就实例化对象
     public class Singleton{
         private static Singleton instance = new Singleton();
         private Singleton(){}
         public static Singleton getInstance(){
             return instance;
         }
     }
     懒汉写法:  调用方法时才创建对象
     public class Singleton{
         private static Singleton instance ;
         private Singleton(){}
         public static Singleton getInstance(){
             if(instance ==null){
                 instance = new Singleton();
             }
             return instance;
         }
     }                

================================================================
抽象类:
   因为继承的关系,子类的功能可以越来越具体,相对来说,父类
  更加一般化,通用化。因为父类封装了子类的共同行为,所以,
 在定义时,我们可以定义方法的逻辑。有的时候,在父类中无法完成
 子类的功能需求,此时,不如不写,即不写方法体,代码简单化。
 但是此方法必须使用abstract修饰,那么此类型也必须使用abstract
 修饰,即抽象类
 
1、抽象方法与抽象类
  1)用abstract修饰的方法,不需要写方法体,但是得用分号来结尾 
  2)有抽象方法的类,必须使用abstract声明(修饰)
2、抽象类不能实例化
  1)  抽象类不能创建对象,没有意义
  2)  抽象类可以提供构造器
  3)  抽象类中可以没有抽象方法
  4)  abstract和final不能同时修饰一个类型
3、继承抽象类
  1)若一个类继承了抽象类,那么这个类必须重写(实现)抽象类的所有抽象方法 
  2)若一个类没有实现抽象类的所有抽象方法, 那么这个类必须使用abstract修饰
4、抽象类的意义:
   1)给不同的子类定义一个父类
   2)抽象类可以封装子类的共同特征与共同行为
   3)虽然子类方法可能有不能的实现逻辑,但是
         方法的定义一致。

猜你喜欢

转载自blog.csdn.net/qq_42397691/article/details/81432406