zoukankan      html  css  js  c++  java
  • Java知识点汇总-1

    目录

    1 native方法

    2 泛型

    3 hashcode

    4 JDK主要的包

    5 被final修饰的类特点

    6 空串与null串

    7 判断字符串是否相等 

    1 native方法

    JDK源代码由C++、Java、C、汇编 这四种语言组成。JVM主体是C++写的,JNI部分是C,工具类是Java写的,JVM里混有汇编代码。JNI是Java Native Interface的缩写,从Java 1.1 开始,Java Native Interface (JNI)标准就成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。一个Native Method是这样的一个java方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。

    2 泛型

    泛型的常用的几种表示:

    E - Element (在集合中使用,因为集合中存放的是元素)
    T - Type(Java 类)
    K - Key(键)
    V - Value(值)
    N - Number(数值类型)
    ? - 表示不确定的java类型

    T  bean ;

    Class<T> bean;

    Class<?> bean;

    单独的T代表一个类型,而Class<T>和Class<?>代表这个类型所对应的类

    Class<T>在实例化的时候,T要替换成具体类

    Class<?>它是个通配泛型,?可以代表任何类型   

    <? extends T>受限统配,表示T的一个未知子类。

    <? super T>下限统配,表示T的一个未知父类。

     3 hashcode

    首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。 于是,Java采用了哈希表的原理。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。如果详细讲解哈希算法,那需要更多的文章篇幅,我在这里就不介绍了。初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际上并不是真正的在内存的物理地址,不过可以这样理解)。 这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 所以,
    Java对于eqauls方法和hashCode方法是这样规定的:
    1、如果两个对象相同,那么它们的hashCode值一定要相同;
    2、如果两个对象的hashCode相同,它们并不一定相同 上面说的对象相同指的是用eqauls方法比较。 你当然可以不按要求去做了,但你会发现,相同的对象可以出现在Set集合中。同时,增加新元素的效率会大大下降。

    补充:hashcode、equals、==的区别

    在Object类中对三种的定义如下:

    public boolean equals(Object obj) {
            return (this == obj);
        }
    public native int hashCode();

    在一个具体的实例场景中:比如学生对象,假设new了两个学生对象,尽管如学号、姓名等内容完全相同,但是JVM仍然会认为是两个对象,这点与现实中是有区别的,因此可以重写equals方法进行判断内容。

    .equals()在Object中与 == 是等价的,但是.equals()在语义上是对象的内容相等,因此很多时候都会对.equals()进行重写,而 == 则是对内存地址进行比较而不关心对象内容。

    .hashcode()的存在则是为了便于我们对对象的操作,比如说使用hash算法来加速数据的存取,原则上来说,我们应该保证.equals()相等的对象的.hashcode()也是相等的,反之则不需要保证。因此在必要的时候我们要对hashcode进行重写。

    hashcode实质上是一个int类型的数,hashcode是可以重复的

    博客连接:https://blog.csdn.net/qq_39907763/article/details/82883045。没有整理完,还要再看看hashmap的原理

    4 JDK中的主要包

     在有道云笔记上写的有脑图,不过还不完善。

     先用这个图作为参考。

    5 被final修饰的类特点

    在有的文章上说若一个类被final修饰其方法和属性也默认为final的,但经过实际测试发现这样的说法是错误的。一个类被final修饰只代表该类不可以被继承,其它的特点与普通类是一样的,因为不能够被继承所以没有办法对方法重写。

    6 空串与null串

    空串表示的是长度为0的字符串,检查是否空串的代码如下:

    if(str.length == 0)
    //
    if(str.equals(""))

    空串是一个Java对象,自己的长度(0)和内容(空)。null表示没有任何对象与该变量进行关联,这也是要为什么要先检查null再判断是否为空串的原因

    if(str != null && str.length() != 0)

    0

  • 相关阅读:
    流程配置中心选不到销售订单新变更单
    python中判断NULL
    BOS的长度范围(字符)
    业务对象功能授权无法找到用户权限申请单
    116环境无法上传附件
    审批流XML的岗位存储的值
    solidity语法4——合约(类似面向对象中的Class)
    solidity语法3——全局变量,表达式,控制结构
    solidity语法1——概述
    solidity语法2——类型
  • 原文地址:https://www.cnblogs.com/youngao/p/12011105.html
Copyright © 2011-2022 走看看