Loading... ## 1.面向对象和面向过程: 面向对象:因为需要维护对象,所以需要消耗更多的内存。并且因为有对象的存在,所以更易维护,更易扩展和更易复用。 面向过程:因为不需要实例化对象,所以性能高。但不易维护、扩展和复用。 ## 2.java语言的特点: 面向对象的三大特性:继承、封装和多态。 跨平台、支持多线程和网络编程。 ## 3.jdk和jre的区别: jre翻译过来就是java的运行环境,主要包括java虚拟机、java类库和java命令等。能编译程序但无法创建程序。 jdk包含了jre,并且还多了java编译器javac,和javadoc工具,可以编译和创建程序。 ## 4.java和c++的区别: 相同点:都是面向对象,支持封装、多态和继承。 不同点:java是单继承,自动内存管理。c++是多继承,需要手动释放资源。 ## 5.字符常量和字符串常量区别: 字符常量用char表示,使用单引号,可以看作一个整型值参与运算,占2个字符。 字符串常量:使用双引号,占若干个字节。 ## 6. 重写和重载: 重写:子类继承父类的相同方法,方法名和传参输出这些需要一致,进行方法体内部的重写。父类方法被static和final,private修饰时,无法被重写。 重载:同一个类中方法名相同,但传参个数或者传参类型不一致。 ## 7.三大特征: 多态:父类引用指向子类对象,编译期间不确定,运行期间才能确定。 继承:子类继承父类,可以使用父类的方法,以便于进行复用。 封装:把类的属性进行私有化,并对外提供属性的方法。 ## 8.String、Stringbuilder和Stringbuffer String:String类使用final修饰,所以String创建的对象不可改变,每当进行字符串拼接时,会重新创建对象,消耗内存。 Stringbuilder:线程不安全,但效率高。 Stringbuffer:线程安全,但效率低。 ## 9. 自动拆箱和自动装箱: 自动装箱:基本数据类型转为引用类型。 自动拆箱:引用类型转为基本数据类型。 ## 10.为什么java类中需要定义无参构造器: 当使用super()方法来调用父类时,会默认调用父类的无参构造器,当定义了有参构造器时,没有定义无参构造器,调用super()方法会报错。 ## 11.接口和抽象类: 接口:不能拥有实例方法,只能定义静态常量,一个类可以有多个接口,interface和implement 抽象类:抽象类中可以有非抽象方法,可以有普通变量,只能单继承。abstract和extents ## 12.成员变量和局部变量: 成员变量:定义在类中。 局部变量:定义在方法体中。 ## 13.==和equals: ==是比较对象的地址。 equals如果对象没有重写equlas方法,则跟==相同,比较对象的地址,当重写了equals方法,则比较equals方法。 ## 14.为什么重写了equals方法,需要重写hashcode方法: 因为使用hashmap等方法时,需要使用对象的hashcode值,有可能你需要放入两个内容相同的对象,因为hashcode不一样,导致识别成两个对象。 ## 15.程序、进程和线程: 程序:可以运行的文件。 进程:程序的一次运行过程。 线程:进程的单位,一个进程可能产生多个线程。 ## 16.线程的运行状态: 对象new出来新建状态----调用start方法进入可运行状态-----cup调用进入运行状态------因为某些原因进入阻塞状态-----最后程序运行完或异常等情况进入死亡状态 ## 17.final关键字: final关键字可以修饰类、方法和变量。 修饰类:无法被继承。 修饰方法:无法重写。 修饰变量:必须初始化且之后无法改变。 ## 18.异常: 所有异常的父类:throwable。两个重要子类:error和exception error:程序无法处理的异常,例如虚拟机内存溢出等。 exception:程序可以处理的异常。try catch finally ## 19.finally不会执行的情况: 在进入到try catch之前退出方法。 执行system.exit(). 关闭cpu ## 20.io流: 按流向分为输入流和输出流。 按操作单元:字节流和字符流。 ## 21.深拷贝和浅拷贝: 浅拷贝:对值进行拷贝,对对象的引用进行拷贝。 深拷贝:对值进行拷贝,对象先创建,再进行拷贝。 ## 22.数组转集合、集合转数组: Arrays.asList(); Collection.toarry(); ## 23.static关键字: static修饰方法和成员变量时,属于类,可以被类直接调用,而不需要创建对象。 static修饰代码块时,再执行构造方法前时会先执行代码块内容,且只初始化一次。 ## 24.this关键字: 表示当前对象。 ## 25.super关键字: 用于子类访问父类的方法和变量。 ## 26.反射: 再运行阶段,可以动态的获取类信息,并动态的调用对象。对任何一个类,可以知道该类的所有信息,对任何对象,可以调用所有属性和方法。 优点:运行期间动态加载类,提高灵活性。 缺点:性能比直接创建对象低,并且动态创建对象,降低了程序的安全行。 ## 27.反射应用场景: Spring的bean创建和aop的动态代理。 jdbc的连接数据库驱动 ## 28.集合: 集合分为collection和map。 collection分为:list和set。list有序且可重复,set无序且不可重复。 map主要包括键值对,key,value。 ## 29.arrylist和linkedlist: arrylist底层使用数组,数组内存中是一段连续内存,所以查询快,但操作慢。因为底层改变数组又要重写创建数组。 linkedlist底层使用链表,所以操作快,但查询慢。因为链表可以直接替换值所以操作快,但查询的话,会重头到脚的查找,所以查询慢。 ## 30.线程创建方式: 继承thread类。 实现runnable接口。重写run方法。 实现callable接口,重写call方法。 使用线程池。 ## 31.java跨平台原理: 因为jvm,不同的操作系统对应不同的jvm,将java程序编译成.class文件放到对应的jvm中,由jvm最后解析成对应操作系统能识别的底层语言。 ## 32.多线程停止: sleep:等待一段时间,继续运行。 wait:等待一段时间,但需要唤醒操作。 yield:让出当前线程,让同等级的线程先运行。 join:加入其他线程,等其他线程运行完后,自己再运行。 ## 33.死锁: 多个线程因为竞争资源,又不释放自己的资源,导致的一种相互等待的状态。 解决方法:最好一个线程只锁定一个对象,且需要锁定其他对象时,先释放自己已经锁定的对象。 ## 34.socket: socket套接字,封装了tcp和ip的接口,网络通讯就是socket通讯,主要进行io数据传输操作。 ## 35.接口优点: 解决了java单继承的局限性。只定义方法不实现,保证了安全行,且易扩展,起到了规范的作用。 ## 36.线程优先级遵循原则: 子线程继承父线程的优先级,线程级别越高,越容易执行。 ## 37.jar包和war包: jar包:可以简单理解为java打的包,包含了class文件。 war包:可以简单理解为web项目的包,不仅包括class文件,还有一堆配置文件和html等。 ## 38.java可变参数: 类型一样,但参数个数一样。 ## 39.类加载方式: new对象。 反射class.forname方法。 类加载器:loadclass来加载类,再调用newinstance方法来实例对象。 最后修改:2022 年 01 月 17 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏