Java语言基础学习Object类和包装类

一、java.lang.Object类

1.Object类是所有Java类的根父类

2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类

例:method(Object obj){…} //可以接收任何类作为其参数 Person o=new Person(); method(o);

public class Person { ...

}

//等价于:

public class Person extends Object {

...

}

3.Object类中的功能(属性、方法)就具有通用性。

* 属性:无

* 方法:equals() 、toString() 、getClass() 、hashCode() 、clone() 、finalize()、wait() 、 notify()、notifyAll()

finalize()----->垃圾回收机制回收任何对象之前,总会先调用它的finalize方法。永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

4. Object类只声明了一个空参的构造器。

 二、Object 类的使用-toString() 方法 

当我们输出一个对象的引用时,实际上就是调用当前对象的toString()。输出的具体信息看toString()方法体内容。Date date=new Date(); System.out.println(“now=”+date); 相当于 System.out.println(“now=”+date.toString());

Object类中toString()的定义:toString()方法在Object类中定义,其返回值是String类型,返回类名和它 的引用地址。

//Object类中toString()的定义:

public String toString() {

        return getClass().getName() + "@" + Integer.toHexString(hashCode());

    }

Customer cust1 = new Customer("Tom",21);

    System.out.println(cust1.toString());//com.atguigu.java1.Customer@15db5225

    System.out.println(cust1);//com.atguigu.java1.Customer@15db5225

public void println(Object x) {

    String s = String.valueOf(x);

        synchronized (this) {

            print(s);

            newLine();

        }

    }

public static String valueOf(Object obj) {

        return (obj == null) ? "null" : obj.toString();

    }

在进行String与其它类型数据的连接操作时,自动调用toString()方法 Date now=new Date(); System.out.println(“now=”+now); 相当于 System.out.println(“now=”+now.toString());

像String、Date、File、包装类等都重写了Object类中toString()方法。使得在调用对象的toString()时,返回"实体内容"信息。

可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法,返回字符串的值。 s1=“hello”;System.out.println(s1);//相当于System.out.println(s1.toString());

基本类型数据转换为String类型时,调用了对应包装类的toString()方法 int a=10; System.out.println(“a=”+a);

三、 Java中的JUnit单元测试

步骤:

1.选中当前工程 - 右键选择:build path - add libraries - JUnit  - 下一步

2.创建Java类,进行单元测试。

* 此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器(默认)。

3.此类中声明单元测试方法

* 此时的单元测试方法:方法的权限是public,没有返回值,没有形参

4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;

5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。

6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test。每个单元测试方法是独立的。

public class JUnitTest {//JunitTest单元测试类名

    public void test(){//test单元测试方法名



    }

}

说明:

1.如果执行结果没有任何异常:绿条

2.如果执行结果出现异常:红条

四、包装类的使用

针对八种基本数据类型定义相应的引用类型—包装类(封装类)

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

装箱:包装类使得一个基本数据类型的数据变成了类。

有了类的特点,可以调用类中的方法。

int i = 500;

Integer t = new Integer(i);

String s = t.toString(); // s = “500“,t是类,有toString方法

String s1 = Integer.toString(314); // s1= “314“  将数字转换成字符串。

String s2=“4.56”;

double ds=Double.parseDouble(s2);  //将字符串转换成数字

 拆箱:将数字包装类中内容变为基本数据类型。

int i = 500;

Integer t = new Integer(i);

int j = t.intValue(); // j = 500,intValue取出包装类中的数据

包装类在实际开发中用的最多的在于字符串变为基本数据类型。

String str1 = "30" ;

String str2 = "30.3" ;

int x = Integer.parseInt(str1) ; // 将字符串变为int型

float f = Float.parseFloat(str2) ; // 将字符串变为int型

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

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

  @Test

  public void test1(){


    int num1 = 10;

// System.out.println(num1.toString());

    Integer in1 = new Integer(num1);

    System.out.println(in1.toString());


    Integer in2 = new Integer("123");

    System.out.println(in2.toString());


    //报异常

// Integer in3 = new Integer("123abc");

// System.out.println(in3.toString());


    Float f1 = new Float(12.3f);

    Float f2 = new Float("12.3");

    System.out.println(f1);

    System.out.println(f2);


    Boolean b1 = new Boolean(true);

    Boolean b2 = new Boolean("TrUe");

    System.out.println(b2);//false

    Boolean b3 = new Boolean("true123");

    System.out.println(b3);//false



    Order order = new Order();

    System.out.println(order.isMale);//false初始默认值

    System.out.println(order.isFemale);//null

  }

class Order{


  boolean isMale;

  Boolean isFemale;

}


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

@Test

  public void test2(){

    Integer in1 = new Integer(12);


    int i1 = in1.intValue();

    System.out.println(i1 + 1);



    Float f1 = new Float(12.3);

    float f2 = f1.floatValue();

    System.out.println(f2 + 1);

  }


自动装箱(类型必须匹配):基本数据类型 --->包装类

//自动装箱:基本数据类型 --->包装类

    int num2 = 10;

    Integer in1 = num2;//自动装箱


    boolean b1 = true;

    Boolean b2 = b1;//自动装箱


自动拆箱(类型必须匹配):包装类--->基本数据类型

System.out.println(in1.toString());

    int num3 = in1;//自动拆箱


基本数据类型、包装类--->String类型:调用String重载的valueOf(Xxx xxx)

@Test

  public void test4(){


    int num1 = 10;

    //方式1:连接运算

    String str1 = num1 + "";

    //方式2:调用String的valueOf(Xxx xxx)

    float f1 = 12.3f;

    String str2 = String.valueOf(f1);//"12.3"


    Double d1 = new Double(12.4);

    String str3 = String.valueOf(d1);

    System.out.println(str2);//”12.3”

    System.out.println(str3);//"12.4"


  }


String类型 --->基本数据类型、包装类:调用包装类的parseXxx(String s)

@Test

  public void test5(){

    String str1 = "123";

    //错误的情况:

//  int num1 = (int)str1;

//  Integer in1 = (Integer)str1;

    //可能会报NumberFormatException

    int num2 = Integer.parseInt(str1);

    System.out.println(num2 + 1);


    String str2 = "true1";

    boolean b1 = Boolean.parseBoolean(str2);

    System.out.println(b1);//false(不是true都返回false)

  }

面试题:

@Test

  public void test1() {

    Object o1 = true ? new Integer(1) : new Double(2.0);

    System.out.println(o1);//1.0(自动类型提升,编译时要统一类型所以Integer会自动转换成Double类型。

  }

@Test

  public void test2() {

    Object o2;

    if (true)

      o2 = new Integer(1);

    else

      o2 = new Double(2.0);

    System.out.println(o2);// 1

  }

@Test

  public void test3() {

    Integer i = new Integer(1);

    Integer j = new Integer(1);

    System.out.println(i == j);//false


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

    保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高装箱效率


    Integer m = 1;

    Integer n = 1;

    System.out.println(m == n);//true

    Integer x = 128;//相当于new了一个Integer对象

    Integer y = 128;//相当于new了一个Integer对象

    System.out.println(x == y);//false

  }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354