博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象(中)之二
阅读量:7080 次
发布时间:2019-06-28

本文共 6363 字,大约阅读时间需要 21 分钟。

1 instanceof操作符

1.1 语法及说明

  • 语法:
x(对象) instanceof A(类名)
  • 说明:
  • ①要求对象所属的类和类A必须是子类和父类的关系,否则编译错误。
  • ②如果x属于类A的子类B,x instanceof A值也为true。

1.2 instanceof操作符的应用示例

  • 示例:
package day13;public class Person {}
View Code
package day13;public class Student extends Person {}
View Code
package day13;public class Demo {    public static void main(String[] args) {        Person p = new Student();        if(p instanceof Student){            System.out.println("p的实际类型是Student");        }    }}
View Code

 

2 对象类型转换

2.1 基本数据类型的转换

  • 自动类型转换:小的数据类型可以自动转换成大的数据类型。
package day13;public class Demo {    public static void main(String[] args) {        int i = 100;        long l = i;        System.out.println("l:" + l);    }}
  • 强制类型转换:可以把大的数据类型强制的转换成小的数据类型,但是可能会丢失精度。
package day13;public class Demo {    public static void main(String[] args) {        double d = 20.0;        float f = (float) d;        System.out.println("f:" + f);    }}

2.2 对象类型转换

  • 向上类型转换:从子类到父类的类型转换,其实就是多态。
package day13;public class Person {}
package day13;public class Student extends Person {}
package day13;public class Demo {    public static void main(String[] args) {        Person p = new Student();        System.out.println(p);    }}
  • 向下类型转换:从父类到子类的类型转换必须通过()来实现。
package day13;public class Person {}
package day13;public class Student extends Person {}
package day13;public class Demo {    public static void main(String[] args) {        Person p = new Student();        Student s = (Student) p;        System.out.println(s);    }}

2.3 图解基本类型转换和对象类型转换

 

3 Object类

3.1 Object类的简介

  • Object类是所有类的根类。
  • 如果在类的声明中没有使用extends关键字指明其父类,则默认父类是Object类,换言之,Object类是所有类的直接或间接父类。

3.2 Object类的主要结构

 

3.3 ==操作符和equals()方法

3.3.1 ==操作符

  • 基本类型比较值
package day13;public class Demo {    public static void main(String[] args) {        int a = 10;        int b = 10;        double d = 10.0;        System.out.println(a == b);//true        System.out.println(a == d);//true    }}
  • 引用类型比较引用(是否指向同一个对象)
package day13;public class Person {}
package day13;public class Demo {    public static void main(String[] args) {        Person p = new Person();        Person p2 = new Person();        Person p3 = p;        System.out.println(p == p2);//false        System.out.println(p3 == p);//true    }}

3.3.2 equals()方法

  • 所有的类都集成了Object类,也就获取了equals()方法,当然自己本身也可以重写equals()方法。
  • Object类定义的equals()方法和==操作符的作用一样。
public boolean equals(Object obj) {        return (this == obj);    }
  • 但是,当使用equals()方法进行比较的时候,对类File、String、Date及包装类来说,是比较类型和内容而不仅仅考虑引用是否是同一个对象,因为这些类重写过equals()方法。

3.3.3 ==操作符和equals()方法的区别

  • ==既可以比较基本数据类型也可以比较引用数据类型。对于基本数据类型就是比较值,对于引用数据类型就是比较内存地址。
  • equals()方法,是属于Object类里面的方法,如果该方法没有被重写过默认也是==,我们可以看到String等类的equals()方法是被重写过的,而且String类在日常开发中用的也比较多,久而久之,形成了equals()方法是比较值的错误观点。
  • 具体要看自定义类里面有没有重写Object类的equals()方法来判断(具体问题具体分析)。
  • 通常情况下,重写equals()方法的时候,会比较类中的相应属性是否相等。

3.3.4 重写equals()方法的应用示例

  • 示例:
package day13;import java.util.Objects;public class Person {    private String name;    private Integer age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Person person = (Person) o;        return Objects.equals(name, person.name) &&                Objects.equals(age, person.age);    }    @Override    public int hashCode() {        return Objects.hash(name, age);    }}
View Code

3.4 toString()方法

3.4.1 toString()方法的简介

  • toString()方法在Object类中定义,其返回值是String类型,其在Object中的定义如下:
public String toString() {        return getClass().getName() + "@" + Integer.toHexString(hashCode());    }
  • 可以根据需要在用户自定义类中重写toString()方法,例如:String类型就重写了toString()方法,返回字符串的值。

3.4.2 toString()方法的应用示例

  • 示例:
package day13;import java.util.Objects;public class Person {    private String name;    private Integer age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Person person = (Person) o;        return Objects.equals(name, person.name) &&                Objects.equals(age, person.age);    }    @Override    public int hashCode() {        return Objects.hash(name, age);    }    @Override    public String toString() {        return "Person{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}
View Code

 

4 包装类

4.1 包装类的概念

  • 针对八种基本数据类型定义相应的引用类型就是包装类。
  • 有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。

4.2 包装类图解

 

4.3 包装类的使用

4.3.1 装箱

  • 基本数据类型包装成包装类的实例。有如下的两种方式(以Integer为例):
  • ①通过包装类的构造器实现。
public Integer(int value) {        this.value = value;    }
  • ②通过字符串参数构造包装类对象。
public Integer(String s) throws NumberFormatException {        this.value = parseInt(s, 10);    }

 

  • 示例:
package day13;public class Demo {    public static void main(String[] args) {        int i = 10;        Integer integer = new Integer(i);        String s = "10";        Integer integer1 = new Integer(s);        System.out.println("integer:" + integer);        System.out.println("integer1:" + integer1);    }}

4.3.2 拆箱

  • 获取包装类对象中包装的基本类型变量,通过调用包装类的.xxxValue()方法。
public int intValue() {        return value;    }

 

  • 示例: 
package day13;public class Demo {    public static void main(String[] args) {        Integer integer = new Integer(5);        int num = integer.intValue();        System.out.println("num:" + num);    }}

4.3.3 自动装箱和拆箱

  • 在JDK5之后,Java支持自动装箱和自动拆箱。但是类型必须匹配。

4.3.4 字符串和基本数据类型的相互转化

  • 字符串转换为基本数据类型:调用包装类的静态方法parseXXX(String s)。 
public static int parseInt(String s) throws NumberFormatException {        return parseInt(s,10); }

 

  • 示例: 
package day13;public class Demo {    public static void main(String[] args) {        String s = "123";        int num = Integer.parseInt(s);        System.out.println("num:" + num);    }}

 

  • 基本类型转换为字符串:调用String的valueOf()方法。

 

  • 示例:
package day13;public class Demo {    public static void main(String[] args) {        int num = 123;        String s = String.valueOf(num);        System.out.println("s:" + s);    }}

 

转载于:https://www.cnblogs.com/xuweiweiwoaini/p/10940545.html

你可能感兴趣的文章
微服务和容器对企业带来什么样的影响?
查看>>
新工具填补Docker管理空白
查看>>
行为驱动开发使用体验
查看>>
智慧城市:中国特色新型城镇化的发展方向
查看>>
新恶意软件使用Tor在Mac OS X系统打开“后门”
查看>>
JIRA管理思路
查看>>
2017年我国城市大数据市场规模将达189亿元
查看>>
P2P追债也用上大数据
查看>>
英特尔眼中的未来
查看>>
对于linux操作系统的认识和了解
查看>>
使用LoadRunner监测MySQL数据库的性能
查看>>
泰国TCCtech公司投资850万美元扩大数据中心规模
查看>>
Amlogic连续三年居中国OTT芯片市占率第一
查看>>
如何用Java将excel数据导入数据库
查看>>
美国全球光伏调查对华影响有限
查看>>
机器选角、票房预测,大数据如何改变中国电影?
查看>>
Facebook重组欧洲管理层:意法等地区销售主管将离职
查看>>
分布式光伏:谨慎备战“爆发期”
查看>>
XP,没重启,“魔窟”可以“莫哭”
查看>>
市场突破1300亿 我国传感器产业急需“自力更生”
查看>>