Java基础(Day4)

一、Object

1.Object类--所以类的父类

Java是面向对象的,在Java中所有的引用类,默认继承Object类 

所有的引用数据类型默认值都是null

在引用类型中==比较地址是否是一个

  Easy01_Object easyObject = new Easy01_Object();
        Easy01_Object easyObject1 = new Easy01_Object();

        System.out.println(easyObject==easyObject1);

1.1 toString方法

  • 重写 toString方法
//重写toString方法

public String toString(){
        return "this is a easyObject";
    }
  • 调用toString方法----System.out.println(easyObject.toString());
1.2 finalize()
 public void finalize(){
        //一个对象要被销毁时执行的代码(没有东西执行他时,他有可能会销毁,是一个对象最后执行的方法)
        System.out.println("-------");
    }

1.3基本数据类型封装类

  • 为什么要有基本数据类型?
    答:Java为实现万物皆对象的理念,给每一个基本数据类型提供了一个包装类
  • 基本数据类型封装类
      byte    Byte
    * short    Short
    * int      Integer
    * long     Long
    *
    * float     Float
    * double    Double
    *
    * char     Character
    *
    * boolean   Boolean
    * */
  • 基本数据类型与基本数据类型封装类转换
  • 基本数据类型转换成对应的封装类型的过程:装箱(自动完成)--ValueOf
    将封装类型转换成对应的基本数据类型的过程:拆箱(自动完成
  • 基本数据类型的封装类 可以和基本数据类型直接转换:
    封装类与相对应的基本数据类型比较:封装类型拆箱变成基本数据类型之后再比较
//封装类与基本数据类型比较:封装类型拆箱变成基本数据类型之后再比较
        Integer IntN =12;
        int iN=12;
        System.out.println(IntN==iN);//TRUE

        Integer IntN1 =1200;
        int iN1=1200;
        System.out.println(IntN==iN);//TRUE

        Short sN=1200;
        System.out.println(sN==iN);//false
       Double dN=1200.0;
        System.out.println(dN==iN);//false

       // System.out.println(dN==IntN);
  • 为基本数据类型的封装类型的提供了缓存(-128~127):
  • 整数类型都有缓存,缓存范围:-128~127,只有Integer类型的范围可以调整范围大小

浮点型没有,char有缓存(0-127),boolean有缓存

//为基本数据类型的封装类型的提供了缓存(-128~127):
        //整数类型都有缓存,缓存范围:-128~127,只有Integer类型的范围可以调整
        // 浮点型没有,char有缓存(0-127),boolean有缓存
        Integer int1=12;
        Integer int2=12;

        System.out.println(int1==int2);//true--缓存对象
        Integer int3=1122;
        Integer int4=1122;
        System.out.println(int4==int3);//false

        Character intB =0;
        Character intA = new Character('\u0000');
        System.out.println(intB==intA);//false
  • 将String 转化成数值型
//将String 转化成数值型
        Integer.valueOf("34"); //将String 转化成Integer
        Integer.parseInt("12"); //将String 转化成int
包 package
使用本包下的类不需要导包,使用其他包的类需要导包
所有类默认引入java.lang 包
类名重名时,可以使用类的全名,指定具体使用哪一个类
      !!!!包具有封装性,没有子父之间的关系
包 package--声明包:约束不同功能的类
   //使用本包下的类不需要导包,使用其他包的类需要导包
   //所有类默认引入java.lang 包
    //类名重名时,可以使用类的全名,指定具体使用哪一个类
        //!!!!包具有封装性,没有子父之间的关系
    new com.easya.EasyA();
    new  com.easyb.EasyD();

二、抽象类

2.1抽象类

  • 抽象类--使用abstract修饰的类
    抽象方法没有方法体
    可以没有抽象方法
    /*都有构造方法
    
  • 抽象类与普通类区别:
  • 1.抽象类没有直接实例(不能new)
  • 2.抽象类--使用abstract修饰的类 *

2.抽象类中可以定义抽象方法*/

public abstract void methodB(int a, double b);
  • 抽象类的继承
  • 实体类继承抽象类必须实现抽象类中抽象方法(重写)
    抽象类可以继承实体类
    抽象类可以继承抽象类

2.2 Final

  • final 最后的,最终的
    /*1。final可以修饰类---不能被继承的类
    
    //Cannot inherit from final 'com.easy7_17.FinalClass'
    //不能被继承
    /*
    class AA extends  FinalClass{
    
    }*/
    
    * 2.可以修饰方法名----不能被重写
    * 3.可以修饰量---变量,常量---不能被重新赋值  = 
      final int a=12;
           // a=11;  //3.可以修饰量---变量,常量---不能被重新赋值
           // static int b=12;//static 是累的,应该写外边--全局变量
注意点:
1.量没有抽象的
2.fianl与static时相互悖论的,上面两个结论 
3.stract与final相悖
可以直接赋值,或者在构造方法中进行赋值,一定要初始化,finnal不能重写赋值

2.3接口

  • 接口中只能定义方法,但是没有方法体
    //接口中的方法--抽象方法:没有具体实现的方法(没有方法体)--默认使用public abstract修饰
    //接口中可以定义属性--必须是常量(接口中默认修饰 public static final)
    //常量必须大写,必须要初始化
    //static  类的  每个类只有一个内存
  • //接口中可以定义修饰的default实体方法(可以实现多个)
    //虽然使用default但是访问权限还是public
  • //Java中,使用implements声明一个类,实现接口
    //一个类可以实现多个接口,一个接口可以继承多个接口
    
interface  IVechicle extends Cloneable,Serializable{
    //接口中只能定义方法,但是没有方法体
   
    void transport();
    public static final String  MAX_SPEED="20000";
    String  MIN_SPEED="10";

    default void test(){

    }

}


class ObjectInter implements  IVechicle,Cloneable, Serializable {

    public void transport(){

    }
}
  • //接口没有构造方法,抽象类中有构造方法
    //抽象方法没有方法体
    //空接口Cloneable  Serializable
    //接口通过extends继承接口,继承
    //抽象类可以实现接口
  • 如果接口中只有一个没有实现(只有一个抽象方法)的方法,这个接口称为函数式接口,
    可以使用@FunctionalInterface---都能用lambda表达式表示

2.4 Static

  • static  :静态的  类的
    * static修饰的属性是属于类的,可以使用"类名"直接调用static修饰的属性与方法
    * 静态属性对所有的对象(本类的)是共享的
    * 本类的对象也可以调用静态的属性与方法,调用的方式还是静态方式
  • 注意点:
    //静态方法中不能直接使用非静态属性和方法(类的不能直接使用对象的)
    
    //有对象一定有类,有类不一定有对象,故静态方法不能直接使用非静态属性与方法(除非指定明确的对象,因为他不确定有没有类)
    有static必须会有方法体,他是类的一开始加载完成的
    //静态方法不能重写(属于类的)
    想用类名直接调用就是要static  想用对象直接调用属性方法就要用非静态类

2.5 clone

  • 为什么要有clone?
  • new 与反射都可以创建内容一模一样的对象,
    // 但是我们创建对象之后需要set方法来设置相关的一摸一样的内容,
    // 如果需要创建更多的内容一致的对象,就需要一直重复上述操作----clone
  • clone使用步骤:
    使用object的clone方法--使用步骤:
    * 1.在需要调用clone方法的对象上添加实现cloneable接口
    * 2.复写clone方法,在自己的clone方法中调用父类的clone方法,将返回值强转成本类类型,
    *    将当前修饰符改成public
    * 3.在测试中调用对象的clone方法
  • clone 方法是浅拷贝,对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。
    class RunoobTest implements Cloneable {
     
        // 声明变量
        String name;
        int likes;
     
        public static void main(String[] args) {
     
            // 创建对象
            RunoobTest obj1 = new RunoobTest();
     
            // 初始化变量
            obj1.name = "Runoob";
            obj1.likes = 111;
     
            // 打印输出
            System.out.println(obj1.name); // Runoob
            System.out.println(obj1.likes); // 111
     
            try {
     
                // 创建 obj1 的拷贝
                RunoobTest obj2 = (RunoobTest) obj1.clone();
     
                // 使用 obj2 输出变量
                System.out.println(obj2.name); // Runoob
                System.out.println(obj2.likes); // 111
            } catch (Exception e) {
                System.out.println(e);
            }
     
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值