栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础整理(十一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础整理(十一)

包机制、访问控制权限、Object类、匿名内部类 包机制
  • 为什么使用package?

    package是java中包机制。包机制的作用是为了方便程序的管理。不同功能的类分别存放在不同的包下。

  • package怎么用?

    package是一个关键字,后面加包名

    package com.baidu.javase
    

    package语句只允许出现在java源代码的第一行

  • 包名有没有命名规范?

    一般都采用公司域名倒叙的方式

    公司域名倒序 + 项目名 + 模块名 + 功能名
    
  • import使用

    • import什么时候用?

      A类中使用B类

      A类和B类都在同一个包下,不需要imprt

      A类和B类不在同一个包下,需要import

      java.lang.*;这个包下的类不需要使用import导入

    • import怎么使用?

      import语句只能出现在package语句之下,class声明语句之上,也可以采用星号的形式

      import java.util.* //这个效率不低,因为编译器编译时,会自动把*转换为具体的类
      

访问控制权限
  • 访问控制权限有哪些?

    private(私有)、public(公开)、protected(受保护)、默认

  • 4个访问控制权限的范围

    • private表示私有,只能在本类中访问
    • public表示公开,在任何位置可以访问
    • “默认”表示只能在本类、以及同包下访问
    • protected只能在本类、同包、子类中访问
    • public > protected > 默认 > private
  • 访问控制权限修饰符可以修饰什么?

    • 属性(4个都可以使用)
    • 方法(4个都可以使用)
    • 类(pubic和默认可以使用、其他不行)
    • 接口(pubic和默认可以使用、其他不行)

Object类

任何一个类都默认继承Object

1. toString()方法
  • 源代码

    public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
     }//类名@对象的内存地址转换为十六进制的形式
    
  • 作用

    通过调用这个方法可以将一个“java对象”转换成“字符串”形式,建议所有子类重写toString()方法

    public class Student {
        
        private int id;
        private String name;
        
        public String toString(){
            return "学号:" + id + ",姓名" + name;
        }
        
    }
    

2. equals()方法
  • 源代码

     public boolean equals(Object obj) {
            return (this == obj);
        }
    
  • 作用

    通过equals方法来判断两个对象是否相等

    但是,在Object类中的equals方法当中,默认使用 ” == “ 判断两个java对象是否相等。而 ” == “判断的是两个java对象的内存地址,我们应该判断两个java对象的内容是否相等,所以我们还是要重写equals方法

    public class Student {
    
         int id;
         String name;
        
        public Student(){
            
        }
        public Student(int id , String name){
            this.id = id;
            this.name= name;
        }
    
        public boolean equals(Object obj){
            if(obj==null || !(obj instanceof Student))
                return false;
            if(this==obj) //地址相同 指向的内容一定相同
                return true;
            Student s=(Student)obj;
            if(id==s.id&&name.equals(s.name))
                return true;
            return false;
        }
    }
    
    

匿名内部类
  • 什么是内部类?

    在类的内部又定义一个新类,称为匿名内部类

  • 内部类的分类

    • 静态内部类:类似于静态变量
    • 实例内部类:类似于实例变量
    • 局部内部类:类似于局部变量(匿名内部类属于局部内部类中的一种)
    class Test{
        
        static class Inner1{
            //静态内部类
        }
        
        class Inner2{
            //实例内部类
        }
        
        public void doSome(){
            
            class Inner3{
                //局部内部类
            }
            
        }
        
    }
    
  • 匿名内部类实例

    public class Demo{
    
        public static void main(String[] args) {
    
            Math m = new Math();
            m.mySum(new Menu() { //匿名内部类 表示这个类没有名字
                @Override        //表面上看上去是接口new了,实际不是,后面的{}代表了对接口的实现
                public int sum(int a, int b) {
                    return a+b;
                }
            },20,30);
    
        }
    }
    
    public interface Menu {
    
        int sum(int a,int b);
    
    }
    
    
    class Math{
    
        public void mySum(Menu m,int x,int y){
            int result=m.sum(x,y);
            System.out.println(x + "+" + y + "=" + result);
        }
    
    }
    

    以上方法等价于:

    public class Demo{
    
        public static void main(String[] args) {
    
            Math m = new Math();
            m.mySum(new MenuImpl(),20,30);
    
        }
    }
    
    class Math{
    
        public void mySum(Menu m,int x,int y){
            int result=m.sum(x,y);
            System.out.println(x + "+" + y + "=" + result);
        }
    
    }
    
    public interface Menu {
    
        int sum(int a,int b);
    
    }
    
    
    public class MenuImpl implements Menu {
        @Override
        public int sum(int a, int b) {
            return a+b;
        }
    }
    

    总结:为什么不建议使用匿名内部类?

    因为一个类没有名字,没有办法重复使用,代码太乱,可读性差

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号