2020年10月6日 整理

一、Java 关键字

1.1 基础关键字

image.png
可能的错误

  • const 和 goto 是被保留的关键字,但是不会再使用了
  • true、false、null 看起来像关键字,其实它们只是普通的文字

1.2 volidate 关键字

摘自牛客网 —— 菩萨旭光

  1. 每次从内存中取值,不从缓存中什么的拿值。这就保证了用 volatile修饰的共享变量,每次的更新对于其他线程都是可见的。
  2. volatile保证了其他线程的立即可见性,就没有保证原子性。
  3. 由于有些时候对 volatile的操作,不会被保存,说明不会造成阻塞。不可用与多线程环境下的计数器。

二、Java 类加载器

2.1 Java 三种类加载器

  1. BootStrap ClassLoader:负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
  2. Extension ClassLoader:负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
  3. App ClassLoader:负责加载当前java应用的classpath中的所有类。

2.2 类加载器是如何搜索类的?

ClassLoader 使用的是 双亲委托模型 来搜索类的

我们的应用程序是由以上三种类加载器互相配合加载的。

工作原理:

是当一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法加载这个加载请求的时候,子加载器才会尝试自己去加载。

为什么使用它?

  1. 可避免重复加载,当父类已经加载该类的时候,子类不需要重复加载
  2. 如果不使用这种方式加载,会存在安全隐患,用户可以随时自定义 String 的 API 动态替代 Java核心 API 中心的模型

三、变量相关

3.1 静态变量

  1. 静态变量会默认赋初值
  2. 局部变量 和 final 声明的变量必须手动赋值
  3. static 修饰的变量是同一个类生成的对象共享的

    1. public class MyClass{
    2. static int i;
    3. public static void main(String argv[]){
    4. System.out.println(i); // 0
    5. }
    6. }

3.2 静态常量

Q: 下面关于整形常量 i 的表述正确的是?

  • static final int i = 2314;
  1. 被 final 修饰的变量是常量
  2. 被 final 修饰的变量要赋初值

四、Java Bean 相关

4.1 Java Bean 相关重要概念

  1. Java 是区分大小写的
  2. Java 文件和 Bean所定义的类名一定要相同,并且是大小写敏感。
  3. 懂得如何在JSP 文件中引用JavaBean,其实就是的语句。


4.2 引用类型

4.2.1 String 类相关

  1. String str = new String("Hello"); // 这种方式创建的字符串,和正常创建的对象一样,保存在堆区
  2. String str2 = "hello"; // 这种方式创建的字符串保存在字符串常量区
  3. 所以两者 str == str2 结果是 false

五、ASCLL 码相关

5.1 ASCLL 和 ANSI

  • 标准ASCII只使用 7个bit,扩展的 ASCLL 使用 8 bit
  • ASCII码是ANSI码的子集
  • 简体中文 Windows 系统中, ANSI 是 GBK
  • ASCLL 码包含一些特殊的空字符

**

六、运算符相关

6.1 算数取余的符号问题

2020年10月9日 整理

  1. System.out.println(12%5);
  2. System.out.println((-12)%5);
  3. System.out.println(12%(-5));
  4. System.out.println((-12)%(-5));
  5. 2
  6. -2
  7. 2
  8. -2

运算的结果与 被除数的符号相同

6.2 运算符优先级

有括号的永远都是最先运行的!!!

  1. int x=20,y=5;
  2. System.out.println(x+y +""+(x+y)+y);
  3. x+y+""+(20+5)+y
  4. 25+""+25+5 // 变成字符串拼接了
  5. 25255

6.3 运算符相关

  1. null 值不能复制给基本类型变量,比如 boolean,int,float 等等
  2. double a = 0.945d, long i = 432L;

6.4 赋值运算符

合法的赋值运算符

  1. i++;
  2. y = (int) i; 而不是 y = int(i)

    七、Java 基础类型与引用类型

    7.1 基础类型

7.2 引用类型(包装类型)

7.2.1 String 类型

  1. String s = "12312";
  2. System.out.println(s.length());
  3. int[] arr= new int[22];
  4. System.out.println(arr.length);

八、Java 中包的关系

访问权限控制范围:

public > protected > default (包权限) > private

默认的就是包权限,但是要注意,protected 权限不仅包含同一个包中,以及不在同一个包中的子类

九、Java 基础语法

9.6 循环

for 循环
for (int i=0;判断条件;变量增量)

  1. for (m = 0, n = -1; n = 0; m++, n++) // n 不符合条件
  2. n++;