【Java】每日一点Java小知识 --- day6

每日一点Java基础小知识 — day6

欢迎来到叮当猫学编程的Java基础小知识系列~在这里,你将会看到叮当猫每日关于Java的基础知识总结,欢迎大家的点赞关注喔

  1. 方法重载:

    • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样)
    • 被重载的方法可以改变返回类型
    • 被重载的方法可以改变访问修饰符
    • 被重载的方法可以声明新的或更广的检查异常
    • 方法能够在同一个类中或者在一个子类中被重载
    • 无法以返回值类型作为重载函数的区分标准
  2. 方法重写:

    • 参数列表必须完全与被重写方法的相同
    • 返回类型必须完全与被重写方法的返回类型相同
    • 方法名相同
    • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected
    • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以
  3. 关于Javaweb目录问题:

    • /WEB-INF/web.xml 是部署描述文件
    • /WEB-INF/classes 用来放置应用程序用到的自定义类(.class),必须包括包(package)结构
    • /WEB-INF/lib 用来放置应用程序用到的JAR文件
  4. 解决哈希冲突常用的两种方法是:开放定址法和链地址法

    • 开放定址法:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待查的关键字,即查找失败
    • 链地址法:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组T[0…m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针
  5. 关于构造方法:

    • 在类内部用户可以使用关键字**this.构造方法名()**调用(参数决定调用的是本类对应的构造方法)
    • 在子类中用户可以通过**关键字super.父类构造方法名()**调用(参数决定调用的是父类对应的构造方法)
    • 反射机制对于任意一个类,都能够知道这个类的所有属性和方法,包括类的构造方法,反射机制
  6. try{
        
    } catch() {
        
    } finally {
        
    }
    

    finally不管是否有异常都会执行,而且,try可以和catch和finally中的一个搭配使用,但是catch和finally不能单独使用

  7. 关于线程:

    • 定义线程:扩展 java.lang.Thread 类、实现 java.lang.Runnable 接口

    • 实例化线程:

      • 如果是扩展java.lang.Thread类的线程,则直接new即可

      • 如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法

        Thread(Runnable target) 
        Thread(Runnable target, String name) 
        Thread(ThreadGroup group, Runnable target) 
        Thread(ThreadGroup group, Runnable target, String name) 
        Thread(ThreadGroup group, Runnable target, String name, long stackSize)
        
    • 启动线程:在线程的Thread对象上调用start()方法,而不是run()或者别的方法

  8. 对于final关键字:

    • final变量:如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的
    • final方法:类中的 final 方法可以被子类继承,但是不能被子类修改。声明 final 方法的主要目的是防止该方法的内容被修改
    • final类:final 类不能被继承,没有类能够继承 final 类的任何特性
  9. 非静态变量不能够被静态方法访问,只能被该类的实例化访问

    public class Test {
        public int x;  // 非静态变量
        public static void main(String []args) {
            System. out. println("Value is" + x);  // 编译出错,因为静态方法先行执行,此时类中的非静态变量还没有初始化,所以编译出错
        }
    }
    
  10. 子类继承的是父类的所有成员,并不只是非私有方法和状态,利用反射可以看出子类是继承了父类的私有方法的(不管是否是final),只是直接调用父类的私有方法是不可以的,但是利用反射的方式可以调用。字段同理

  11. 两个数值进行二元操作时,会有如下的转换操作:

    • 如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型
    • 否则,如果其中一个操作数是float类型,另一个将会转换为float类型
    • 否则,如果其中一个操作数是long类型,另一个会转换为long类型
    • 否则,两个操作数都转换为int类型
  12. 关于尖括号问题:

    • 只看尖括号里边的!!明确点和范围两个概念
    • 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如 List<A>List<B>List<Object>
    • 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,<? super A> 代表大于等于A的范围,<?> 代表全部范围
    • 尖括号里的所有点之间互相赋值都是错的,除非是俩相同的点
    • 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错
    • 如果某点包含在某个范围里,那么可以赋值,否则,不能赋值
    • List<?> 和 List 是相等的,都代表最大范围
    • 补充:List既是点也是范围,当表示范围时,表示最大范围

    参考牛客Java专项题中的讲解,原题如下:

    class A {}
    class B extends A {}
    class C extends A {}
    class D extends B {}
    下面的哪4个语句是正确的?
    
    A. The type List<A>is assignable to List.
    B. The type List<B>is assignable to List<A>.
    C. The type List<Object>is assignable to List<?>.
    D. The type List<D>is assignable to List<?extends B>.
    E. The type List<?extends A>is assignable to List<A>.
    F. The type List<Object>is assignable to any List reference.
    G. The type List<?extends B>is assignable to List<?extends A>.
    
    public static void main(String[] args) {
    	List<A> a;
        List list;
        list = a;   //A对,因为List就是List<?>,代表最大的范围,A只是其中的一个点,肯定被包含在内
        List<B> b;
        a = b;      //B错,点之间不能相互赋值
        List<?> qm;
        List<Object> o;
        qm = o;     //C对,List<?>代表最大的范围,List<Object>只是一个点,肯定被包含在内
        List<D> d;
        List<? extends B> downB;
        downB = d;  //D对,List<? extends B>代表小于等于B的范围,List<D>是一个点,在其中
        List<?extends A> downA;
        a = downA;  //E错,范围不能赋值给点
        a = o;      //F错,List<Object>只是一个点
        downA = downB;  //G对,小于等于A的范围包含小于等于B的范围,因为B本来就比A小,B时A的子类嘛
    }
    
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值