Object类

 知识点:掌握Object类的作用、掌握Object类中toString()、equal()方法的作用 ,掌握Object接收引用数据类型的操作。

假设一个类在定义时没有明白指明继承哪个类,则默认继承Object类。
在java中全部的类都有一个公共的父类就是Object类,一个类仅仅要没有明显的继承一个类,则肯定就是Object的子类。

例如以下两种代码表示是一样的:

class Person extends Object{}
class Person{}

class Demo{	// 定义Demo类。实际上就是继承了Object类
};
public class ObjectDemo01{
public static void main(String args[]){
Demo d = new Demo() ; // 实例化Demo对象
System.out.println("不加toString()输出:"+d) ;
System.out.println("加上toString()输出:"+d.toString()) ;
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


从以上代码 的执行结果看,加和不加toString()完毕的功能是一样的。也就是证明了对象打印时一定会调用toString ()方法是默认调用的,那么此时就能够覆写toString进行信息的输出。
class Person{
private String name ; // 定义name属性
private int age ; // 定义age属性
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class ObjectDemo02{
public static void main(String args[]){
Person per = new Person("刘勋",24) ; // 实例化Person
System.out.println("对象信息:" + per) ;
}
};

就是打印对象所包括的信息。

equals()方法
equals()方法的主要功能是进行对象的比較操作。

String本身也是Object类的子类,所以已经覆写了此方法。

剖析equals例如以下所看到的:
class Person{
private String name ; // 定义name属性
private int age ; // 定义age属性
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public boolean equals(Object obj){
if(this==obj){ // 地址相等
return true ; // 肯定是同一个对象
}
if(!(obj instanceof Person)){ // 不是Person对象
return false ;
}
Person per = (Person) obj ; // 向下转型
if(per.name.equals(this.name)&&per.age == this.age){
return true ; // 依次比較内容
}else{
return false ;
}
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class ObjectDemo03{
public static void main(String args[]){
Person per1 = new Person("刘勋",30) ; // 实例化Person
Person per2 = new Person("刘勋",30) ; // 实例化Person
System.out.println(per1.equals(per2)? "是同一个人。" : "不是同一个人! ") ;
System.out.println(per1.equals("hello")? "是同一个人!" : "不是同一个人。") ; }
};

Object类是全部类的父类。则全部类的对象都能够使用Object接收,可是Object不光能够接收对象。还能够接收随意的引用数据类型。

使用Object接收接口实例。

interface A{
public String getInfo();
}
class B implements A{
public String getInfo(){ // 覆写方法
return "Hello World!!!" ;
}
};
public class ObjectDemo04{
public static void main(String args[]){
A a = new B() ; // 向上转型。为接口实例化
Object obj = a ; // 使用Object接收,向上转型
A x = (A)obj ; // 向下转型
System.out.println(x.getInfo()) ;
}
};

数组实际上也能够使用Object类进行接收。

public class ObjectDemo05{
public static void main(String args[]){
int temp[] = {1,3,5,7,9} ; // 定义数组
Object obj = temp ; // 使用Object接收数组
print(obj) ;
}
public static void print(Object o){
if(o instanceof int[]){ // 推断是否是整型数组
int x[] = (int[])o ;
for(int i=0;i<x.length;i++){
System.out.print(x[i] + "\t") ;
}
}
}
};

Object类的总结:

1、Object类是全部类的父类,仅仅要是引用数据类型都能够使用Object进行接收。

2、对象在进行向下转型之前一定要先发生向上转型,要使用instanceofkeyword推断。
3、toString():对象打印时调用。
4、equals(): 对象比較时调用。
5、String类也是Object类的子类。

包装类

包装类的要点:须要掌握包装类的作用、掌握包装类的自己主动装箱以及自己主动拆箱操作、掌握包装类的转换操作。

一切皆对象,可是八种数据类型不是对象。比如:把int包装成一个类,这样就能够以对象的形式操作基本数据类型。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">




watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


以下以Integer和Float为例。
装箱以及拆箱:
将基本数据类型变为包装类称为装箱。
将包装类的类型变为基本数据类型称为拆箱。
public class WrapperDemo01{
public static void main(String args[]){
int x = 30 ; // 基本数据类型
Integer i = new Integer(x) ; // 装箱:将基本数据类型变为包装类
int temp = i.intValue() ;// 拆箱:将一个包装类变为基本数据类型
}
};

以下再以小数为例:

public class WrapperDemo02{
public static void main(String args[]){
float f = 30.3f ; // 基本数据类型
Float x = new Float(f) ; // 装箱:将基本数据类型变为包装类
float y = x.floatValue() ;// 拆箱:将一个包装类变为基本数据类型
}
};

在JDK1.5之前对于程序本身来说包装类是不能直接进行“+、-、*、/、++、......”,是不能够的,由于是一个类不能这样做。可是在JDK1.5之后对程序包装类功能进行了改变。添加了自己主动装箱以及自己主动拆箱的功能并且也能够使用包装类直接进行数字运算。

public class WrapperDemo03{
public static void main(String args[]){
Integer i = 30 ; // 自己主动装箱成Integer
Float f = 30.3f ; // 自己主动装箱成Float
int x = i ; // 自己主动拆箱为int
float y = f ; // 自己主动拆箱为float
}
};

在包装类中还存在一个最大的特点,就是能够将字符串变为指定的数据类型。



public class WrapperDemo04{
public static void main(String args[]){
String str1 = "30" ; // 由数字组成的字符串
String str2 = "30.3" ; // 由数字组成的字符串
int x = Integer.parseInt(str1) ; // 将字符串变为int型
float f = Float.parseFloat(str2) ; // 将字符串变为int型
System.out.println("整数乘方:" + x + " * " + x + " = " + (x * x)) ;
System.out.println("小数乘方:" + f + " * " + f + " = " + (f * f)) ;
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

包装类总结:

1、java中有八种基本数据类型的包装类,能够将基本数据类型以类的形式进行操作。

2、基本数据类型变为包装类的过程称为装箱。将包装类变为基本数据类型的过程称为拆箱。
3、在JDK1.5之后提供了自己主动装箱和自己主动拆箱的操作。
4、实际上这而八个类是JAVA中提供的类库。
5、使用包装类能够将字符串进行基本数据类型的转换。

匿名内部类

内部类:在一个类的内部还有另外一个类称为内部类,那么匿名内部类,假设一个类在整个操作中仅仅使用一次的话。就能够将其定义为匿名内部类。匿名内部类是在抽象类以及接口的基础上发展而来的。

interface A{
public void printInfo() ; //
}
class B implements A{ // 实现接口
public void printInfo(){
System.out.println("Hello World!!!") ;
}
};
class X {
public void fun1(){
this.fun2(new B()) ;
}
public void fun2(A a){
a.printInfo() ;
}
};
public class NoInnerClassDemo01{
public static void main(String args[]){
new X().fun1() ; // 实例化X类的对象,并调用fun1()方法
}
};

假设B类仅仅使用一次的话。就没有必要为其单独定义一个类,此时就能够使用匿名内部类解决这个问题。

interface A{
public void printInfo() ; //
}
class X {
public void fun1(){
this.fun2(new A(){
public void printInfo(){
System.out.println("Hello World!!!") ;
}
}
) ;
}
public void fun2(A a){
a.printInfo() ;
}
};
public class NoInnerClassDemo02{
public static void main(String args[]){
new X().fun1() ; // 实例化X类的对象,并调用fun1()方法
}
};

在实际的开发中常常会用到各种开发的框架,在框架上会大量的引用匿名内部类。

interface A{
public void printInfo() ; //
}
class X {
public void fun1(){
this.fun2(new A(){
public void printInfo(){
System.out.println("Hello World!!!") ;
}
}
) ;
}
public void fun2(A a){
a.printInfo() ;
}
};
public class NoInnerClassDemo02{
public static void main(String args[]){
new X().fun1() ; // 实例化X类的对象,并调用fun1()方法
}
};

面向对象高级——Object类、包装类以及匿名内部类的更多相关文章

  1. JavaSE基础知识(5)—面向对象(Object类)

    一.包 java.lang包,属于java中的核心包,系统默认导入的,不用手动导入该包中的类:Object.System.String.Integer等 1.包的好处 ①分类管理java文件,查找和管 ...

  2. [javaSE] 面向对象(Object类toString)

    每一个对象,都有一个在内存中的地址哈希值,这个哈希值是十六进制的 调用Object对象的hashCode()方法,返回这个对象的哈希值 调用Integer.toHexString()方法,转换十六进制 ...

  3. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类

    interface A{ public void printInfo() ; // } class B implements A{ // 实现接口 public void printInfo(){ S ...

  4. 面向对象之包装类与Object类

    一.包装类(Wrapper) 1.包装类出现原因 为了使8种基本数据类型的变量具有类的特征,引入包装类 2.类型间转化 ① 基本数据类型---->对应的包装类:自动装箱 包装类---->对 ...

  5. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:Object类

    class Demo{ // 定义Demo类,实际上就是继承了Object类 }; public class ObjectDemo01{ public static void main(String ...

  6. Object类、包装类、内部类详解

    1.Object类 1.概念: 1.1 所有类在创建时都默认继承了java.lang.Object 1.2 所有类对象都可以声明为类对象的引用 Object ob1=new String(); Obj ...

  7. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  8. Java面向对象进阶篇(包装类,不可变类)

    一. Java 8的包装类 Java中的8种基本数据类型不支持面向对象的变成机制,也不具备对象的特性:没有成员变量,方法可以调用.为此,Java为这8 种基本数据类型分别提供了对应的 包装类(Byte ...

  9. Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类

    Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯.2.面向对象的出现,将复杂的事情简单化.3.面向对象的出现,将之前过程中 ...

随机推荐

  1. 用make编译openCV报错:ts_gtest.cpp:(.text._ZN7testing8internal2RED2Ev+0xf): undefined reference to 'regfreeA'

    解决方案: the cause is the google tests is looking for the generic regex.h but cmake used the regex.h fr ...

  2. CSS 强制换行和禁止换行强制换行 和禁止换行样式

    强制换行 1.word-break: break-all;       只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word;   只对英文起作用,以单词作为换行依据. ...

  3. 洛谷P1284 三角形牧场

    题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有 ...

  4. DP思路

    在这里记录一些在大神们的博客,以及自己做过的一些DP的神奇思路吧 1.2015/04 NEUQ 月赛  转自:http://zyfzyf.is-programmer.com/posts/89993.h ...

  5. 【转】vs2012-vs2010使用stlport库的配置

    http://www.cnblogs.com/sbaicl/archive/2012/08/30/2663114.html STLport下载地址:http://sourceforge.net/pro ...

  6. UML图与软件开发过程那点关系

    首先,软工文档, 软工文档,也就是计划,设计,描述,使用软件的一些文件,它最大的特点就是固定不变,用来给不同的人和计算机来阅读.在期间,文档起到了桥梁的作用,看这张图很形象: 在这里在看一下国家统一规 ...

  7. Regular Expression Matching leetcode java

    题目: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ...

  8. Java信号量Semaphore

    Semaphore Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得. Semaphore实现的功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少 ...

  9. Android Migrate Android Code

    近期在更改程序架构的时候,用引用Library的方式实现程序的共享化过程中发现R.id.xx的文件不能够在  switch cases  中使用 看代码提示,如下信息: As of ADT 14, r ...

  10. Spring Boot集成持久化Quartz定时任务管理和界面展示

    本文是对之前的一篇文章Spring+SpringMVC+mybatis+Quartz整合代码部分做的一个修改和补充, 其中最大的变化就是后台框架变成了Spring Boot. 本工程所用到的技术或工具 ...