疯狂java——day04

包装类

java有8种基本类型,byte short int long float double char boolean

这8个基本类型不能当成对象使用,而且不能接受null值。

为了解决上面问题,java为8种基本类型提供了对应的包装类--------可将他们包装成对象。

byte-----Byte

short----Short

int--------Integer

long-----Long

float-----Float

自动装箱:基本类型的值可以自动当作基本类型的值

自动拆箱:包装类的实例可以自动当作基本类型是值使用

Integer in = 2;
Object ob = 2.3;//2.3自动装箱Double,Double自动向上转型为Object
Long re = in * ob;
System.out.println(re);// 自动拆箱

做项目时,同常来说建议使用包装类来声明变量。

包装类的方法:

​ 方法可将字符串转成对应的基本类型值

int i = Integer.parseInt("123");//------->i = 123
long lo = Long.parseLong("123");//------->lo = 123
blooean b = Boolean.parseBoolean("true");//---->b = true

NumberFormatException:要转的字符串不符合数值格式,会引发该异常。

  • 面视题

    public class 面视题
    {
        public static void main(String[] args)
            {
                Integer i = 20; // 在-128~127之间,缓存
                Integer j = 20; // 直接使用缓存中的对象
                System.out.println(i == j);//true
    
                Integer k = 200; 
                Integer l = 200;
                System.out.println(k == l);//false
            }
    }
    

    当程序对Integer使用自动装箱时,它有一个缓存机制,它会缓存-128~127之间的对象。

两个被重写的方法

  • toString()方法

    程序打印对象,或把对象自动转成字符串时,实际上调用的是该对象的toString方法。

    Object提供的toString返回:类名@hashCode方法返回 返回的是16进制的数值。

    @Override
    public String toString()
    {
    return "Apple[color="+color
    		+",weight="+weight
    		+"]";
    }
    //重写toString方法,返回对象的信息
    

    任何对象+"",就会变成字符串

  • equals()方法

    == 如果判断的两个引用变量,要求两个引用变量指向同一个对象时,才会返回true.

    默认的equals:Object提供的equals方法,判断两个对象相等的标准与==是完全一样的。

    • 重写equals()方法,根据业务规则定义。比较一些关键的成员变量。

      在这里插入图片描述

    在这里插入图片描述

    static修饰符详解

    static并不是静态的意思。static是类的意思,有static修饰的成员属于类成员,没有static的成员属于实例成员。

    static是否可以修饰局部变量------局部变量不属于成员 ,不能用static修饰

    static能否修饰外部类 ----------------外部类不属于成员,因此不能用static修饰

    static可修饰的成员:成员变量、方法、构造器、初始化块、内部类

    • static 成员(成员变量、方法、初始化块、内部类)属于类成员

      所有类成员,都只能用类名调用!java允许使用对象来调用类成员,其实没有意义!

    • static考点:static成员不能访问非static成员;非static成员可以访问static成员

    在这里插入图片描述

    单例模式

    在某些场景下,某些类只需要(只能)创建一个实例,比如系统的窗口管理器,数据库引擎访问点,Java程序所在的jre环境。。。。。。都只要产生一个实例。此时就应该采用单例模式。

    如何设计单例模式?

    • 隐藏构造器--------避免被创建实例

    • 暴露一个static方法,该方法用于创建实例,该方法还需要保证,该类只产生一个实例。

      public class Singleton
      {
      	private static Singleton s;
      	// 构造器隐藏
      	private Singleton(){}
      	//暴露一个static方法,用于创建
      	public static Singleton instance()
      	{
      		if (s == null) //还没有创建实例
      		{
      			s = new Singleton();
      		}
      		return s
      	}
      }
      
      public class SingletonTest
      {
      	public static void main(String[] args)
      	{
      		Singleton s1 = new Singleton();//报错,构造器隐藏了
      		Singleton s1 = Singleton.instance();
      		Singleton s1 = Singleton.instance();
      		System.out.println(s1 == s2);//true
      	}
      }
      

final修饰符详解

可以修饰变量(各种)、方法、类。

final与abstract是互斥的

  • final修饰变量:该变量被赋初始值后,不能被重新赋值,final修饰的变量必须赋初始值,且只能赋值一次

  • final修饰的成员变量

    非final的成员变量:系统自动分配

    final的成员变量:必须显示指定初始值

    • final实例变量必须显示指定初始值,且必须在以下3个位置

      • 定义时指定初始值
      • 实例初始化块
      • 每个构造器显示指定一次初始值

      本质上只有一个:构造器

    • final类变量必须显示指定初始值,且必须在以下2个位置

      • 定义时指定初始值
      • 类初始化块

      本质上只有一个:类初始化块

    • final修饰局部变量

      与普通变量的区别是:不能第二次赋值,必须由程序员显示赋值。

    • final修饰引用类型变量

      final只能保证本身的变量不被重新赋值,但可以修改final变量所引用的对象

      重写toString()

      在这里插入图片描述

      在这里插入图片描述

    • final修饰的“宏替换”的变量

      如果一个变量满足以下3个条件:

      • 变量有final修饰
      • 声明变量时指定初始值
      • 变量的初始值可以在编译时确定(初始值的表达式中没有变量、方法调用等)

      这个变量就会消失,所有出现该变量的地方,在编译时就会替换该变量的值。

      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • final修饰方法

      表明该方法不能被子类重写。但是该方法可以被重载,也可以被子类调用!

      在这里插入图片描述

    • final修饰类

      表明该类不能派生子类!jdk里有很多类都是final: String Math System

abstract(抽象)

他只能修饰2个东西:方法、类。抽象方法、抽象类。

abstract与final互斥。

  • 抽象类:有得有失。

    抽象类与普通类的区别:有得有失

    有得:得到一个新功能:抽象类可拥有抽象方法。

    有失:失去一个功能:创建对象。

    抽象类的主要作用:

    • 派生子类
    • 子类构造器一定要调用父类构造器方法一次,因此抽象类一定有构造器。
  • 抽象方法:

    只有方法签名,没有方法体的方法。

    只有抽象类可以拥有抽象方法

  • 抽象类作用:

    • 定义变量
    • 调用类方法和类变量
    • 派生子类-----主要目的
  • 抽象类派生子类

    子类要么重写抽象父类中所有抽象方法,要么子类也只能是抽象的。

接口

接口相当于一种彻底抽象的类,接口体现的是一种规范--------要暴露出来供大家使用,多以接口的多有东西都用public修饰,不管你写还是不写,时钟都是public修饰,通常不写。

【修饰符】interface 接口名 extends 父接口1,父接口2,…

{

​ // 成员变量。只有常量。始终会添加public static final修饰。通常不写。

​ //抽象方法。java8后,类方法、默认方法(抽象添加方法体)默认方法就是实例方法

​ //内部类

}

  • 接口是多继承的。
  • 修饰符:public 。 接口是彻底抽象的,不能有final;接口已经够抽象了,因此不需要abstract修饰
  • 接口名:基本等同于类名,接口一般推荐都是用形容词。添加able就是形容词。

在这里插入图片描述

在这里插入图片描述

  • 接口的作用:

    • 定义变量,只能实现类的实例来赋值(向上转型)
    • 调用类方法或类变量
    • 派生实现类
  • 实现接口

    【修饰符】 class 类名 extends 父类 implements 父接口1,父接口2,…

    {

    ​ //5大成员

    }

  • java9为接口增加的private方法

    多个default方法之间很可能出现“公共部分”,这个“公共部分”就应该被抽取到“工具方法”中。

    而工具方法又希望被隐藏,=====用private修饰。

    本质:工具方法,为其他方法服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值