• 【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+"日";
        }
    
    }
  • 相关阅读:
    实现业务逻辑的几种不同方法,及其优缺点 事务脚本、表模块、活动记录、领域模型
    JQuery Tree Jquery树型菜单插件
    SQL实现表名更改,列名更改,约束更改
    Differences Between NHibernate and Entity Framework
    CSS菜单,图片阴影,表单样式
    事务
    纯CSS三列布局
    Quartz Develop Practice One
    创建WinPE启动盘、常用imagex指令、常用dism指令
    Using User Defined Types in COM & ATL
  • 原文地址:https://www.cnblogs.com/frankruby/p/12921869.html
Copyright © 2020-2023  润新知