引言:
Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢?在java中,除了Integer和Character定义的名称和对应的基本类型差异大,其他六种都是将首字母大写就可以了。
Integer,Byte,Float,Double,Short,Long都是Number类的子类。Character和Boolean都是Object直接子类;这8个类都是final修饰的(不可被继承)。
boolean bool = false;Boolean b2 = new Boolean(bool);Integer i = new Integer(3);int i2 = i.intValue();Boolean b1 = new Boolean("TRue");//trueboolean b2 = b1.booleanValue();Float f = new Float("3.14");//3.14Integer i2 = new Integer("123s");//NumberFormatExceptionjdk1.5开始出现的特性:
Integer i = 3;//装箱int i2 = i;//拆箱
Object flag = new Boolean(false);if(flag instanceof Boolean){    Boolean b = (Boolean)flag;    boolean b2 = b;}注:包装类可以为null,而基本数据类型不可以为null。
String str = "17";int i = Integer.parseInt(str);//String  --> 基本类型String s1 = String.valueOf(i);//基本类型 --> String
基本类型转String,简易方式:int ii = 10;
String iiStr = 10 + "";定义
classOOXXextendsObject{}等价于 classooXX{}
常见方法 publicbooleanequals(Objectobj):默认实现比较两个对象的地址值是否相同 publicinthashCode():取得该对象的Hash码 publicStringtoString():对象描述,默认输出 全限定类名+@+十六进制的hashCode值
toString()方法:
equals()方法:判断是否指向同一个对象,根据实际需求判定是否重写。publicbooleanequals(Objectobj){}
String类覆写了 Object的equals方法:只比较字符的内容是否相同
equals()和 ==的区别equals()在String来中,是比较两个字符串内容是否相等。== 对于引用类型来说,是比较两个对象的地址值是否相等。
public class EqualsDemo {
    public static void main(String[] args) {        String s1 = "HelloWorld";        String s4 = new String("HelloWorld");
        System.out.println(s1.equals(s4));//true        System.out.println(s1 == s4);//false    }}代码块指的是使用"{}"括起来的一段代码,根据代码块存在的位置可以分为4种:
代码块里变量的作用域:只在自己所在区域(前后的{})内有效;
普通代码块就是直接定义在方法或语句中定义的代码块:
public void show(){    普通代码块}直接写在类中的代码块:
优先于构造方法执行,每次实例化对象之前都会执行构造代码块。
public class Demo {    {        System.out.println("我是构造代码块");    }    public Demo(){        System.out.println("我是构造方法");    }    public static void main(String[] args) {        Demo d1  = new Demo();        Demo d2  = new Demo();    }}
/*打印结果:我是构造代码块我是构造方法我是构造代码块我是构造方法
*/使用static 修饰的构造代码块:
优先于主方法执行,优先于构造代码块执行,不管有创建多少对象,静态代码块只执行一次,可用于给静态变量赋值;
测试各代码块的优先级
/** * *    优先级顺序:静态代码块  > 构造代码块 > 普通代码块 *    备注:无论创建几个对象,静态代码块只执行一次! */
public class Demo13 {    Demo13(){        System.out.println("我是构造方法!");    }    {        System.out.println("我是构造代码块!");//实例化对象的时候才会去调用!    }    static{        System.out.println("我是静态代码块!");    }
    public static void main(String[] args) {        new Demo13();        new Demo13();//再次创建对象,证明无论创建几次对象,静态代码块都只执行一次        System.out.println("我是普通代码块!");    }}
输出:我是静态代码块!我是构造代码块!我是构造方法!我是构造代码块!我是构造方法!我是普通代码块!有的时候我们为了避免外界创建某类的实例,就将某类的构造方法私有化,即将它的构造方法用private修饰;例如昨天谈到的单例模式,就是将构造方法进行私有化
外界如何用到?
我们在来中提供静态的get方法!不提供的话外界就没法创建对象!(对反射无效)
class Stu{    //将构造方法私有化    private Stu(){
    }
    public static Stu getInstance(){        return new Stu();    }}
public class Demo15 {    public static void main(String[] args) {        //这里编译报错        Stu s = new Stu();        //我们可以使用getInstance方法获取Stu的对象        Stu s1 = Stu.getInstance();    }}final class Name {}
class NewName extends Name {//ERROR,报错,因为Name有final修饰}
public class Demo15 {    final int COUNT = 10;    int index = 0;
    public void fun() {        //报错 final修饰变量时,初值就是其值,不可以变化,就是常量        COUNT = 200;    }
}