java_day4

对象数据类型(Casting)

  • 基本数据类型

    • 自动类型转换:小的数据类型可以自动转换成大的数据类型
    • 强制类型转换:可以把大的数据类型强制转换成小的数据类型
  • java对象的强制类型转换成为造型

    • 从子类到父类的转换可以自动进行 (儿子和很简单转换成爸爸)
    • 从父类到子类的类型转换必须通过造型来实现 (爸爸要转换成儿子并没有那么容易)
    • 无继承关系的引用类型的转换是非法的

操作符==与equals方法

  • ==

    • 基本类型比较值,只要两个变量的值相等,才返回true
    • 引用类型比较引用,只有指向同一个对象时,才返回true
    • 使用时,两边的数据类型要相兼容,否则出错
  • equals()

    • 所有类都继承了Object,也就获得了equals方法,还可以重写

    • 只能比较引用类型,其作用与==相同,比较是否指向同一个对象

    • 特殊 当用equal方法进行比较时,对类File,String,Date以及报装类(Wrapper Class)来说,是比较类型及内容,而不考虑引用的是否是同一个对象

      • 原因:在这些类中重写了Object类的equals方法。
    • equal可以自己重写

String对象的创建

  • 字面量创建String对象

    • String s1 = "abc"; 在堆中的字符串常量池加入"abc",并将其地址发送给s1;
    • String s2 = "abc"; 由于之前在常量池中已经有了"abc",所以现在不用创建,而是把之前的"abc"所在地址发给了s2
    • 所以s1 == s2返回true,因为地址相同
  • new创建String对象

    • String s3 = new String("def"); 在常量池中添加"def"对象,在堆中创建值为def的对象s3,返回指向堆中s3的引用
    • String s4 = new String("def"); 常量池中已经有值为"def"的对象,不做处理,在队中创建值为"def"的对象s4,返回指向堆中s4的引用
  • String s5 = "x" + "y"; 经过JVM优化,直接在常量池中添加xy对象

  • String s6 = new String("1") + new String("1") + new String("2"); 通过StringBuilder实现,在常量池中添加1和2两个对象,在堆中创建值为"112"的对象,把引用地址给s6

字面量创建的方法更省内存

包装类

  • 针对八种基本定义相应的引用类型——包装类
  • 有了类的特点,就可以调用类中的方法
基本数据类型包装类
booleanBoolean
byteByte
shortShort
intInteger
longLong
charCharacter
floatFlaot
doubleDouble
  • 基本数据类型包装成包装类的实例——装箱

  • 获得包装类对象中包装的基本类型变量——拆箱

    • 调用包装类的.xxxValue()方法
  • jdk1.5之后,支持自动装箱、自动拆箱,但类型必须要匹配

字符串转换成基本数据类型

  • 通过包装类的构造器实现:

    • int i = new Integer("12");
  • 通过包装类的parseXxx(String s)静态方法

    • Float f = Float.parseFloat("12.1");

基本数据类型转换成字符串

  • 调用字符串重载的valueOf()方法

    • String fstr = String.valueOf(2.34f);
  • 更直接的方式

    • String inStr = 5 + "";

主要用途:基本数据类型与字符串之间的转换

toString方法

toString方法是源自于Object类的方法

父类toString方法就是输出当前对象内存的地址,如果你想要输出类的其他信息,重写toString方法

关键字static

修饰变量:对于一个类而言,如果其某一属性在所有对象中都是一样的,那么就用static关键字来修饰;设置和访问都直接用类.属性就行(常称其为类属性)

类属性、类方法和设计思想

  • 类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法就设置为类方法

  • 如果方法与调用者无关,则这样的方法通常声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用(比较常用,尤其在工具类中)

  • 被修饰后得成员有以下特点:

    • 随着类的加载而加载
    • 优先于对象存在
    • 修饰的成员,被所有对象共享
    • 访问权限允许时,可不创建对象,直接被类调用

单例设计模式

设计模式:在大量的实践中总结和理论化之后优选的代码结构,编程风格、以及解决问题的思考方式,也就是套路。

单例:只有一个实例
场景:如果new一个对象需要消耗大量的时间和空间,就是和使用单例模式,只new一个对象,以后一直使用这个对象。

饿汉式的单例模式:一开始就new一个对象,然后将此对象发给后面的所有对象。

懒汉式的单例设计模式:最开始,对象是null,直到有第一个人调用,才new一个对象,之后调用的都用这个对象

 


立志成为一名攻城狮