每日一考-9.15

wait和sleep的区别

简说:wait释放🔒,sleep不释放🔒

例子:买票过程中,当程序进行上锁后

  • sleep控制下的线程,买票是一一完成,当程序休眠后,sleep不会释放🔒,购票者和售票完成后才能继续后面购票操作,顺序执行。

  • wait控制下的线程,购票是多人同时进行,当程序等待时,wait会释放锁,后续购票这会涌入,开始同时买票,同时执行。

  • sleep属于Thread中的方法,wait属于Object中的方法。

重载和重写

重载:同一类中,多个方法有相同的方法名,当参数列表不同。

重写:子类在继承父类的方法的基础山(方法名和参数列表完全相同)对父类方法的实现进行覆盖的操作叫重写

简单的来说,

  • 重载:同一类中,同名不同参数。

  • 重写:父子类中,子类对父类方法的实现覆盖。

 

JDK JRE JVM

简单的说

jdk就是Java开发环境,JRE就是Java运行环境,JVM就是Java跨平台的核心,运行编译好的字节码文件.class文件

细说

  • JVM(Java Virtual Machine):在倒是第二层,由他可以在各种平台上运行,JVM就是Java的虚拟机,不同平台有各自的虚拟机,这也是Java实现跨平台运行的关键。

  • JRE(Java Runtime Environment):JRE大部分是C和C++语言编写的,他是我们在编译Java时所需要的基础类库,包括Java虚拟机和Java程序所需要的核心类库等。核心类库主要是Java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型,基本数学函数,字符串处理,线程,一场处理类等,系统缺省加载这个包,如果只是想要运行一个开发号的Java程序,只需要安装JRE即可

  • JDK(Java Development Kit):JDK还包含了jre之外的东西,就是这些东西帮助我们编译Java代码,还有监控JVM,JDK的一些工具是提供给Java开发人员使用的,其中包含了Java开发工具,也包含了JDK,就无需在单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等。

String StringBuffer StringBuilder区别

String(常量:一旦被创建好了,不能被修改)不可变 StringBuffer可变 加锁 线程安全 StringBuilder可变 未加锁 线程不安全 单线程效率高

public class StringStringBufferStringBuilder {
    public static void main(String[] args) {
        /*
        修改相当于生成一个新的字符串对象
        局部变量s指向不同的两字符串
        “小别”字符串常量没有变成“abc”
        新生成“abc”字符串,然后把它赋值给了s
         */
        String s = "小别";
        s = "abc";
        //线程不安全,在单线程环境下StringBuilder效率最高
        StringBuilder builder = new StringBuilder(s);
        builder.append("d");
        //底层加锁,并发安全,线程安全
        StringBuffer buffer = new StringBuffer(s);
        buffer.append("a");
    }
}

hashCode 和 equals 区别

如果两个对象hashCode不同,那么他们肯定是不同两对象 如果两对象hashCode相同,不代表这两对象一定是同一对象 (如 2r,3S,43K,44等哈希值都为51628) 如果两对象相等,那么他们的hashCode就一定相同

在只重写equals方法时是 无法实现两个对象名字相同就认为两对象相同 重写hasCode方法后才有可能做到

public class User {
    private String name;
​
    public User(String name) {
        this.name = name;
    }
​
    public String getName() {
        return name;
    }
​
    @Override
    public boolean equals(Object obj) {
        /*
            两个user对象比较他们name属性
            如果两个对象name属性相同
            则代表两个user对象相等
         */
        User user=(User) obj;
        return user.getName().equals(this.name);
    }
​
    @Override
    public int hashCode() {
        return name.hashCode();
    }
}
​
public class HashCodeEqualsDemo {
    public static void main(String[] args) {
        HashMap<User, String> hashMap = new HashMap<>();
        hashMap.put(new User("小别"), "...");
        /*
            hashMap中get方法首先会判断
            哈希值是否相同的前提下才会去调用
            两对象的equals方法
         */
        System.out.println(hashMap.get(new User("小别")));
    }
}

==和equals

==如果是基本数据类型,比较的是值, 如果是引用类型,比较的是内存地址。 一引用一基本也是比较的值 equals:是Object的方法比较的是所指向的对象的地址值,一般情况还是比较的值具体看各个类重写equals方法后的比较逻辑

注意equals不能用于比较基本数据类型,

public class Demo {
    public static void main(String[] args) {
        String s="123";
        /*
            String中equals方法先比较
            传入值和它本身引用地址是否相同
            (this == anObject)
            如果不同,再一个一个字符逐一比较
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
         */
        s.equals("xxx");
    }
}

什么是Java,为什么要使用Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承,指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好的实现了面向对象理论,允许程序员以优雅的思维进行复杂化的编程。

我个人的理解:(仅是我个人理解,如有不对或者遗漏,希望大家指正和补充)

市场:无论是在世界范围,还是在我国,Java都有者较高的市场占有率

人员:我国有大量的培训机构每年输出大量的Java技术人员,企业不必担心用人问题。

学习:有着完整的,多元的,全系列的教程,说好听些,让我们后来者可以站在巨人的肩膀上学习,难听点就是可以让我们大多数人成为API战士。

生态:Java有着其他语言难以媲美的生态,spring的兴起也为Java带来了春天,一个开源的生态,让开发者可以更专精于业务,让企业可以更低成本的使用。

企业:性能足够使用,人员供给充足,多元简单的框架降低了代码难度,且项目足够多,可以进行二开,复用来降低成本,而且大多企业不会因为少量的性能提升去重构项目,成本太大。

从业者:在大多数公司用的框架可能都大同小异,如果想要进行行业方向的转型,只需要以熟悉业务为主,而且C++就难以做到这点。

面向对象

面向对象就是吧构成问题的事务分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事务在解决问题中的行为。

而类就是面向对象中的重要概念,而我们所说的面向对象的三大特征,封装,继承,多态其实是类的三个特征

  • 封装:核心思想就是隐藏细节,数据安全,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。

  • 继承:子类可以继承父类的属性和方法,并对其进行拓展。

  • 多态:同一种类的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型,接口的回调以及方法的称谢和重载可以实现多态。

注意:Java中继承为单继承,即一个类只有一个父类,但可以实现多个接口。

posted @   别亦难  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示