Java学习记录day06

day06

java.lang.Object类

如果一个类未继承父类,那么他的默认父类就是Object

==和equlas的区别

==运算符:如果比较的是基本数据类型,比较的是两个基本类型的值。如果比较的是引用数据类型,比较的是两个对象的地址值。

​ ==符号使用时,必须保证符号两边类型相同

equlas:用于比较引用数据类型,如果自定义类没有重写equlas()方法时,比较的是两个地址的值,如果重写了equlas()方法,就比较两个对象属性是否相等。

通常情况下,重写equlas方法,都会对类中的属性进行比较

toString()方法

Object类中toString()的使用:

  1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()。
  2. String、Date、File、包装类等都重写了Object类中的toString()方法。使得在调用对象的toString()时,放回“实体内容"信息。
  3. 自定义类也可以重写toString()方法,返回对象的“实体内容”。

包装类

针对8种基本数据类型定义相应的引用数据类型–包装类。

有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。

包装类的使用

  1. Java提供了8中基本数据类型对应的包装类,为了基本数据类型的变量具有类的特征。

  2. 基本数据类型、包装类、String类型三者之间的转换。

    1. 基本数据类型----->包装类:调用包装类的构造器。

      ```java`
      Integer i = new Integer(100);

      
      
    2. 包装类----->基本数据类型:调用包装类xxx的xxxValue()

      Integer i = new Integer(100);
      int num = i.intValue();
      

自动装箱与自动拆箱

这是JDK5之后的新特性

int num = 10;
Integer i = num; //自动装箱
int num1 = i; //自动拆箱					

​ 基本数据类型、包装类----->String类型

int num = 10;
//方式一:连接运算
String str1 = num + ""; 
 //方式二:调用String的valueOf()
float f1 = 12.3f;
String str2 = String.valueOf(f1)

String类型---->基本数据类型、包装类 调用包装类的parseXxx()方法;

String str1 = "123";
int num2 = Integer.parseInt(str1);

Integer内部定义了IntegerCache结构,IntegerCache结构定义了Integer[]

保存了-128127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在-128127,则不会去new一个新的Integer对象,这是一个优化。

static关键字

  1. static:静态的

  2. static 可以用来修饰:属性、方法、代码块、内部类

  3. 使用static修饰属性:静态变量(或类变量)

    1. 属性,按是否使用static修饰,又分为:静态属性、非静态属性(实例属性)

    ​ 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性被修改。

    ​ 静态变量:当我们创建了类的多个对象,多个对象共享同一个变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。

    静态变量随着了类的加载而加载,可以通过”类名.静态变量“调用。

  4. 使用static修饰方法:静态方法

    1. 随着类的加载而记载,可以通过“类.静态方法”的方法进行调用。

    2. 静态方法中,只能调用静态的方法或属性。

      非静态方法中,既可以调用非静态属性的方法或属性,也可以调用静态属性和方法。

  5. static注意点:

  6. 在静态方法中,不能使用this关键字,super关键字 (因为对象都还没创建呢)

  7. 关于静态属性和静态方法的使用,需要从生命周期的角度去理解

  8. 开发中,如何确定一个属性是否要声明为static的?

    • 属性是可以被多个对象所共享,不会随着对象的改变而改变

    开发中,如何确定一个方法是否声明为static的?

    • ​ 操作静态属性的方法,通常设置为static
    • 工具类中的方法,习惯声明为static的

单例设计模式

  1. 类的单例设计模式,就是采用一定的方法保证整个软件系统中,对某个人只能存在一个对象实例。

  2. 实现方式:

    1. 饿汉式

      class Order{
      	private Order(){
              
          }
          private static Order instance = new Order();
          
          public static Order getInstance(){
              return instance;
          }
      }
      
    2. 懒汉式

      class Order{
      	private Order(){
              
          }
          private static Order instance = null;
          
          public static Order getInstance(){
              if(instance == null){
                  instance = new Order();
              }
              return instance;
          }
      }
      

类的成员之四:代码块(初始化代码块)

  1. 代码块的作用:用来初始化类、对象
  2. 代码块如果有修饰的话,只能使用static修饰
  3. 代码块分为:静态代码块和非静态代码块
  4. 静态代码块:随着类的加载而执行,而且只执行一次
  5. 非静态代码块:随着对象的创建而执行,每创建一个对象,就执行一次

由父及子,静态先行。

final关键字

  1. final可以用来修饰的结构:类、方法、变量

  2. final 用来修饰一个类:此类不能被其他类所继承。

  3. final 用来修饰方法:表示此方法不能被重写

  4. final 用来修饰变量:此时的“变量”就是一个常量了

    1. final用来修饰属性,可以考虑赋值的位置有:显示初始化,代码块中初始化,构造器中初始化。

    2. final修饰局部变量:

      尤其是使用final修饰形参时,表示此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但无法重新赋值。

static final 用来修饰属性:全局常量

abstract 关键字的使用

  1. abstract:抽象的。
  2. abstract可以用来修饰的结构:类、方法。
  3. abstract修饰类:抽象类
    • 此类不能被实例化
    • 抽象类中一定有构造器,便于子类实例化调用
    • 开发中,都会提供抽象类的子类,让子类实例化,完成相关的操作
  4. abstract修饰方法:抽象方法
    • 抽象方法只有方法的声明,没有方法体
    • 包含抽象方法的类,一定是抽象类。反之,抽象类中是可以没有抽象方法的。
    • 若子类重写了父类中的所有的抽象方法后,此子类才可以实例化。若子类么有重写父类中的抽象方法,则需要把子类也声明为抽象类

abstract不能用来修饰属性、构造器。

接口

接口的使用

  1. 使用interface来定义
  2. Java中,接口和类是并列的两个结构
  3. 如何定义接口:定义接口中的成员
    1. JDK7及以前:只能定义全局常量和抽象方法
      • 全局常量 public static final修饰的 但是书写时,可以省略
      • 抽象方法 public abstract 修饰的
    2. JDK8:除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法
  4. 接口中不能定义构造器,意味着接口不能实例化
  5. Java开发中,接口都是通过让类实现(implements)的方法来使用
    1. 如果实现类覆盖了接口中的所有抽象方法,则该实现类可以实例化
    2. 如果没有覆盖接口中的所以抽象方法,则该实现类为抽象类。
  6. 类可以实现多个接口,弥补了Java的单继承的局限性
  7. 接口和接口之间可以继承,实现了多继承

接口的具体使用,体现了多态性

接口,实际上可以看做是一种规范

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值