【Java的package/import&访问权限&修饰符&Object常用方法 13】

一、package

在Java开发过程中,为了避免类命名冲突问题,语法中设立了“包”机制,类似于现实世界中的姓氏(单姓,复姓)

包(单包,复包)

语法:

package 包名

package语句只能出现在Java源文件的第一行

包命名规范:公司域名倒序.项目名.模块名

二、import

import引入其他类型,这样的语句只能出现在package之下,class之上

Java常用开发包:

java.lang,此包Java语句标准包,使用此包中的内容无需import引入

Java.sql,提供jdbc接口

java.util,提供常用工具类

java.io,提供各种输入输出流

package com.JavaStudy.packageImport05191;

import com.JavaStudy.packageImport0519.User1;

/**
 * @Author wufq
 * @Date 2020/5/19 14:58
 */
public class User2 {
    public static void main(String[] args){
        //调动另外一个包的类,完整的写法:包名.类名
        com.JavaStudy.packageImport0519.User1 user1 = new com.JavaStudy.packageImport0519.User1();

        //省略的写法,先用import把User1类导入到User2类里面,然后才能使用
        User1 user11 = new User1();
        
    }
}

三、访问权限修饰符

 举例验证default和protected的区别:

 同一个包内以及子类是可以调用protected和default修饰的数据的

 不同的类,protected修饰的数据子类可以访问,default修饰的数据子类不能访问

四、Object类中的方法

1、关于Object类中的equals方法:

|--  equals方法的设计目的:比较两个对象是否一样

|--  Object中的equals方法比较的是两个对象的内存地址,但在现实的业务逻辑中,应当比较两个对象的内容,所以object中的equals方法需要重写

|--  java规范要求:所有的Java对象都要去重写equals方法

|--  等号(==)可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的

package com.JavaStudy.studyObject0519;

public class Test01 {
    public static void main(String[] args){
        Object o1 = new Object();
        Object o2 = new Object();

        Boolean b1 = o1.equals(o2);
        System.out.println(b1);//equals比较的是两个对象是否一致

        MyTime mt1 = new MyTime(2020,5,21);
        MyTime mt2 = new MyTime(2020,5,21);

        System.out.println(mt1.equals(mt2));//真是业务中比较的是两个对象的值,正常返回的应该是true,但是equals比较的是对象的内存地址,多以返回的是false
                                            //如何解决这个问题:对equals方法进行重写(由内存地址的比较转换成内容的比较)

    }
}

class MyTime{
    int year;
    int month;
    int day;

    MyTime(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }

    //重写equals方法
    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }

        if(obj instanceof MyTime){
            MyTime myTime = (MyTime) obj;
            if(this.year == myTime.year&& this.month == month&& this.day==myTime.day){
                return true;
            }
        }
        return false;
    }


}
/*
equals本来是Object的方法,查询的是父类Object的内存地址
要比较子类中的内容就必须要父类Object强制转换成子类对象,只有转换了后,子类在调用equals方法时才是子类的内容对比
 */

 2、深入equals

String中的equals对Object中的equals进行覆盖(无需手动进行方法重写)

一般api的类Java默认会对equals进行重写,自定义的类就需要手动进行重写

package com.JavaStudy.studyObject0519;

/**
 * @Author wufq
 * @Date 2020/5/22 10:23
 */
public class Ttest03 {
    public static void main(String[] args){

        String st1 = new String("Abc");
        String st2 = new String("Abc");

        System.out.println(st1.equals(st2)); //true
    }
}

五、HashCode方法

hashCode()返回对象的哈希码值

不同的对象对应不同的哈希码值

package com.JavaStudy.studyObject0519;
/**
 * @Author wufq
 * @Date 2020/5/22 10:53
 */
public class HashCode {

    public static void main(String[] args){
        Object obj1 = new Object();
        int has1 = obj1.hashCode();
        System.out.println(has1);


        Object obj2 = new Object();
        int has2 = obj2.hashCode();
        System.out.println(has2);
    }
}

====执行结果====

621009875
1265094477

六、toString方法

1、tostring()方法的作用:返回堆中对象的字符串表示,

2、Java的规范要求:实际情况中结果应该是一个简单易于读懂的表达式,所以子类都需要对toString方法进行重写

3、该字符串应该由类名.@.哈希码的十六进制标书组成。getClass().getName() + '@' + Integer.toHexString(hashCode())

package com.JavaStudy.studyObject0519;

/**
 * @Author wufq
 * @Date 2020/5/22 15:35
 */
public class ToString {
    public static void main(String[] args){
        Time time = new Time(2020,5,22);
        System.out.println(time.toString());//重写前com.JavaStudy.studyObject0519.Time@2503dbd3
                                            //重写后:2020年5月22日
    }

}

class Time{
    int year;
    int month;
    int day;

    Time(int year,int month,int day) {
        this.year = year;
        this.month =month;
        this.day = day;
    }

    //重写toString方法
    public String toString(){
        return year+"年"+month+"月"+day+"日";
    }

}
原文地址:https://www.cnblogs.com/frankruby/p/12921869.html