1.Java字符串常量池

字符串常量池,程序当中直接写上双引号字符串,就在字符串常量池中

  • 对于基本类型来说 == 是进行数值得比较
  • 对于引用类型来说 == 是进行【地址值】比较
  • 一个Integer 与 int比较,先将Integer转换成int类型,再做值比较

“引用数据类型是指由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。引用类型包括类、接口、委托和装箱值类型。”

  1. String s1 = "abc";
  2. String s2 = "abc";
  3. System.out.println(s1==s2); //
  4. String s3 = new String("xyz");
  5. String s4 = new String("xyz");
  6. System.out.println(s3==s4); // false
  7. System.out.println(s3.equals(s4)); //

原文链接:https://blog.csdn.net/qq_37554565/article/details/92840278

2.修饰符

image.png


private default protected public
同一个类中
同一个包中
子类中

全局范围内


(1)对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别:public和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此private和protected访问控制符对外部类没有意义。
(2)内部类的上一级程序单元是外部类,它具有4个作用域:同一个类(private)、同一个包(protected)和任何位置(public)。
(3)因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。
链接:https://www.nowcoder.com/questionTerminal/964cf7d6cd29449f91f1dbe21bae8176
来源:牛客网

Java 内部类、成员类、局部类、匿名类等
image.png

3.Object类的方法

image.png
在根类Object中包含以下方法:

  1. clone();
  2. equals();
  3. finalize();
  4. getClass();[align=left][/align]
  5. notify(),notifyAll();
  6. hashCode();
  7. toString();
  8. wait();

4.非访问修饰符

  1. static ,静态修饰符,修饰类方法和类变量。
  2. final 最终修饰符,修饰类、方法和变量,修饰的类不能够被继承,修饰的方法不能被重新定义,修饰的变量表示为不可修改的常量。
  3. abstract 抽象修饰符,用来创建抽象类和抽象方法。
  4. synchronized 修饰符,用于线程编程。
  5. transient 修饰符,用于跳过序列化对象中特定的敏感变量
  6. volatile 修饰符,用于线程编程。

Java的访问修饰符、非访问修饰符分类详细总结以及修饰符用途总结

[Java]static、final修饰的方法是否可以被子类继承、是否可以被子类重写及final链接修饰详解

5.super和this关键字

  1. super关键字的用法有三种:
  2. 1.在子类的成员方法中,访问父类的成员变量。
  3. 2.在子类的成员方法中,访问父类的成员方法。
  4. 3.在子类的构造方法中,访问父类的构造方法。
  1. this 关键字用来访问本类内容,用法也有三种:
  2. 1.在本类的成员方法中,访问本类的成员变量。
  3. 2.在本类的成员方法中,访问本类的另一个成员方法。
  4. 3.在本类的构造方法中,访问本类的另一个构造方法。
  5. 在第三种用法中要注意:
  6. a. this(..)调用也必须是构造方法的第一语句,唯一一个
  7. b.superthis两种构造调用,不能同时使用。

6.包装类的运算

image.png

1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
int a = 220;
Integer b = 220;
System.out.println(a==b);//true
2、两个Integer类型进行“==”比较,如果其值在-128至127 ,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
Integer c=3;
Integer h=3;
Integer e=321;
Integer f=321;
System.out.println(c==h);//true
System.out.println(e==f);//false
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。
Integer a=1;
Integer b=2;
Integer c=3;
System.out.println(c.equals(a+b));//true
4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。

  1. int i=1; <br /> int j = 2; <br /> Integer c=3; <br /> System.out.println(c.equals(i+j));//true

链接:https://www.nowcoder.com/questionTerminal/8b1bd881a81744d79daceaa8244cbf3a

7.java用监视器(锁|synchronized)机制实现了线程之间的同步执行

8.赋值符号

image.png

  1. <<< 没有
  2. 因为 << 后面都是补0

9.单例模式

  1. //懒汉式单例类.在第一次调用的时候实例化自己
  2. public class Singleton {
  3. // 指向自己实例的私有静态引用
  4. // 使用静态变量是因为在静态方法中无法访问非静态方法和非静态变量
  5. private static Singleton single=null;
  6. // 私有的构造方法
  7. private Singleton() {
  8. }
  9. // 以自己实例为返回值的静态的公有方法,静态工厂方法
  10. public static Singleton getInstance() {
  11. if (single == null) {
  12. single = new Singleton();
  13. }
  14. return single;
  15. }
  16. }

10.快排

11.Java常用包的作用

java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。
java.sql 提供使用 Java 编程语言访问并处理存储在数据源中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。功能:包含用于创建用户界面和绘制图形图像的所有类。
java.rmi 提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。

java.lang包是java语言包,是自动导入的。 【lang 是 language】
java.util包是java的工具包,需要手动导入。
java.sql包,JDBC接口类,需要手动导入。
java.io各种输入输入流,需要手动导入。

12.成员变量是具有初始值的(局部变量没有)

成员变量有默认初始值,可以不用赋值,boolean的默认值为false, 局部变量必须赋值。否则编译错误。

13.接口和抽象类的区别

接口和抽象类的区别:
1.接口的方法默认为public abstract ,接口中的变量默认为public static final,在java8之前所有的方法不能有实现
抽象类中可以有非抽象方法
2.一个类可以实现多个接口,但只能继承一个抽象类
3.一个类实现接口,要实现该接口的所有抽象方法。
4.接口不能被实例化,但可以声明,但是必须引用一个实现该接口的对象。
抽象类可以有构造方法,但是不能被直接通过new进行实例化。但可以通过子类继承,实例化子类的时候抽象类也会被实例化。
这其实用到了多态,向上转型。父类引用指向子类对象。
5.从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

14.运行常量池(未完成)

https://www.nowcoder.com/profile/450625121/test/49841234/304949#summary

15.finally关键字

1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

16.ArrayList数组(未完成)

17.线程安全的类(未完成)

18.正则表达式

19.Integer对象的方法

Integer.parseInt(“”);是将字符串类型转换为int的基础数据类型
Integer.valueOf(“”)是将字符串类型数据转换为Integer对象
Integer.intValue();是将Integer对象中的数据取出,返回一个基础数据类型int

20.Java体系结构

Java体系结构包括四个独立但相关的技术:

  • Java程序设计语言
  • Java.class文件格式
  • Java应用编程接口(API)
  • Java虚拟机

我们再在看一下它们四者的关系:
当我们编写并运行一个Java程序时,就同时运用了这四种技术,用Java程序设计语言编写源代码,把它编译成Java.class文件格式,然后再在Java虚拟机中运行class文件。当程序运行的时候,它通过调用class文件实现了Java API的方法来满足程序的Java API调用

21. final、finally、finalize三个关键字的区别

final:可用来定义变量、方法传入的参数、类、方法。
finally:只能跟在try/catch语句中,并且附带一个语句块,表示最后执行。
finalize:是垃圾回收器操作的运行机制中的一部分,进行垃圾回收器操作时会调用finalize方法,因为finalize方法是object的方法,所以每个类都有这个方法并且可以重写这个方法,在这个方法里实现释放系统资源及其他清理工作,JVM不保证此方法总被调用。

22.getClass()及getName

image.png
首先 super.getClass() 是父类的getClass()方法,其父类是Date,它的getClass()方法是继承自Object类而且没有重写,
所以就是调用object的getClass()方法。而看一下getclass的方法解释如下图
image.png
所以可以知道是返回当前运行时的类。
2.在调用getName()方法而getName()是:包名+类名

23.接口

两同两小一大。
方法名,参数类型相同。
子类返回类型和子类抛出异常小于等于父类。
子类访问权限大于等于父类

24.反射

在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。

25.异常

Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
throw用于抛出异常。
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
cacth用于捕获从try中抛出的异常并作出处理。
finally语句块是不管有没有出现异常都要执行的内容。

参考博客
https://xiaoer.blog.csdn.net/article/details/80773970

26.Java变量的分类

27.ClassLoader(未看)

一看你就懂,超详细java中的ClassLoader详解

28.使用锁机制,要综合提高数据结构的访问性能

image.png
A只对写操作加锁,不对读操作加锁,会造成读到脏数据
BCopyOnWrite的核心思想是利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用。这里读写平均,不适用
C分段加锁,只在影响读写的地方加锁,锁可以用读写锁,可以提高效率

29.枚举类(未看)

Java 枚举(enum) 详解7种常见的用法

30.String对象

  1. String x="fmn";
  2. x.toUpperCase();
  3. String y=x.replace('f','F');
  4. y=y+"wxy";
  5. System.out.println(y);
  6. ===
  7. Fmnwxy

本题主要考察String对象的不可变性。
toUpperCase()会对当前对象进行检查 如果不需要转换直接返回当前对象,否则new一个新对象返回;
replace()如果两个参数相同,则直接返回,否则new一个新对象,所以这里y指向”Fmn”;
y=y+”wxy” 这里修改y所指向的字符串对象,让它由指向”Fmn”变成指向”Fmnxyz”.

31.重载和重写的区别

重载和重写的区别

32.String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?

单线程:StringBuilder性能更好
多线程:StringBuffer线程安全

https://blog.csdn.net/weixin_46049759/article/details/121431035

执行次数 非正式术语
12 O(1) 常数阶
5log2n+20 O(logn) 对数阶
2n+3 O(n) 线性阶
2n+3nlog2n+19 O(nlogn) nlogn阶
3n2+2n+1 O(n2) 平方阶
2n O(2n) 指数阶
n! O(n!) 阶乘阶
6n3+2n2+3n+4 O(n3) 立方阶

33.三个注解

  1. @Override
  2. 警告压制
  3. 第三个忘了