JAVA基础知识点复习笔记

一、JAVA基本数据类型

类型booleanbytecharshortintlongfloatdouble
位数18161632643264
强制类型转化:
1. 高位转低位需要强制转换。 
2. 低位转高位自动转。
3. 不带后缀标识的浮点数默认为 double 类型(float后缀为F long后缀为L),将一个int类型赋值给float、long、double时,如果该值超出了int类型的范围,则必须添加后缀   
4. byte、short、char类型的运算操作首先会把这些值转化为int类型,然后进行计算,要想获得相应类型的值必须强制类型转化
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200811220652712.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxODA2MTU1,size_16,color_FFFFFF,t_70)

二、<<符号与>>符号

  1. 符号<<:相当于前面的数乘以2的n次方,比如3<<3 = 3 * 2^3 = 24
  2. 符号>>:相当于前面的数除以2的n次方,比如27>>3 得27/2^3 =27/8 = 3
  3. 无符号右移>>>:例如 a >>> b 指的是将 a 向右移动 b 指定的位数,右移后左边空出的位用零来填充,移出右边的位被丢弃。如果数是正数的话等同于>>。

三、线程的几种状态

  1. 新建(NEW):新创建了一个线程对象,但还没有调用start()方法。
  2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
    线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
  3. 阻塞(BLOCKED):表示线程阻塞于锁。
  4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
  5. 定时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回,如wait(long timeout)。
  6. 终止(TERMINATED):表示该线程已经执行完毕。

四、类初始化顺序

  1. (静态变量、静态初始化块)>(变量、初始化块)>构造器
  2. 父类(静态变量、静态初始化块)>子类(静态变量、静态初始化块)>父类(变量,初始化块)>父类(构造器)>子类(变量,初始化块)>子类(构造器)。

五、类继承覆盖测试

在这里插入图片描述

六、运算符

  1. ++i: 先加 1再使用。

  2. i++:先使用再加 1。
    在这里插入图片描述

  3. 按位与运算(&):二元运算符。当被运算的两个值都为 1 时,运算结果为 1;否则为 0。

  4. 按位或运算(|):二元运算符。当被运算的两个值都为 0 时,运算结果为 0;否则为 1。

  5. 按位异或运算(^):二元运算符。当被运算的两个值(二进制)中任意一个为 1,另一个为 0 时,运算结果为 1;否则为 0。
    如:4 ^ 3 = 7
    在这里插入图片描述

  6. 按位非运算(~):一元运算符。当被运算的值为 1 时,运算结果为 0;当被运算的值为 0 时,运算结果为 1。
    简单说就是加1取反:如 7 就是 -(7+1) = -8

七、 volatile、transient 关键字

  1. 使用了volatile关键字修饰的成员变量具备了如下特性
    a. 禁止指令重排序优化。
    b. 保证该变量对所有线程具备可见性(当线程A修改了volateile修饰的变量的值时,修改后的值对于其他线程来说是可以立即得知的。)
  2. transient:使用了该关键字修饰后的成员变量不会被序列化。

volatile 通过 happens-before(先行发生原则)来保证可见性

八、 JAVA乐观锁、悲观锁

  1. 悲观锁:加了synchronized关键字之后,一旦线程获得到了锁,其他线程就会被阻塞。
  2. 乐观锁:CAS操作,是一种轻量级锁,当线程读取数据时不加锁,在准备会写数据时,比较原值是否被修改,如果值未被其他线程修改,则继续执行,如果值被修改,则重新执行读取操作。
    注:CAS操作会 有ABA问题,也就是说一个线程把值改成了B,但是另一个线程把值又改成了A,导致最终判断的线程比较值还是A。

九、类加载的过程

  1. 加载
    1)通过一个类的全限定名来获取定义此类的二进制字节流。
    2) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
    3) 在内存中生成一个代表这个类的java.lang.Class对象, 作为方法区这个类的各种数据的访问入口。

  2. 验证:这一阶段用于确保Class文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求,保证这些信息被当作代码运行后不会危害虚拟机自身的安全。验证阶段大致分为:文件格式验证、元数据验证、字节码验证、符号引用验证。

  3. 准备:为类中定义的变量(静态变量、static修饰的变量)分配内存并设置类变量初始值阶段。

  4. 解析: 解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程。

  5. 初始化: 执行类构造器方法的过程。

十、类的生命周期

在这里插入图片描述

十一、wait和sleep的区别

在等待时wait 会释放锁,sleep会一直持有锁。 wait通常用于线程间的交互,sleep通常被用于暂停执行。
wait 必须持有对象锁,在while循环里使用wait,因为当线程被唤醒的时候可能业务逻辑还不满足条件,还需要在进行循环进行判断,不满足条件继续wait,这也是不使用if的原因

十二、什么是线程安全

在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行.

十三、interrupt、interrupted、isInterrupted

  1. interrupt :改变线程的状态,不会中断一个正在运行的线程,需要用户自己去监视线程的状态为并做处理
  2. interrupted:测试当前线程是否已经中断。如果连续调用该方法,则第二次调用将返回false。在api文档中说明interrupted()方法具有清除状态的功能。执行后具有将状态标识清除为false的功能
    注:如果线程状态处于阻塞状态被中断,则会抛 InterruptedException中断异常(该线程必须事先预备好处理此异常),从而提早地终结被阻塞状态
  3. isInterrupted:测试线程是否已经中断,但是不能清除状态标识。
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
期末考试题型: 一、 填空题(本题共15空 ,每空1分,共15分。) 二、 单项选择题(本题共20小题,每题1分,共20分。) 三、 是非题(对划“√”,错划“×”,本题共10小题,每题1分,共10分。) 四、 简答题(本题共5小题,每小题5分,共25分。) 五、 程序填空题(本题共5空 ,每空2分,共10分。) 六、 编程题(本题共2小题,每小题10分,共20分。) 二、填空题 1、Java语言是一种完全的_面相对象___程序设计语言。 2、布尔型常量有两个值,它们分别是_true__、_false___。 3、在定义一个方法时,一般都要指明该方法的返回值类型,如果它不返回任何值,则必须将其声明成 void 。 4、在Java语言环境中已经包含了一组相关的核心类库,它们属于Java.lang包。 5、写出完整的main方法的声明 public static void main(String args[]) 。 6、要设计一个Applet小程序,必须先引入包 java.applet 。 7、设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值为:2.75___ 8、被关键字_final___修饰的方法是不能被当前类的子类重新定义的方法。 9、Java中类成员的限定词有以下几种:private, _protected__, public__, 默认友好。 10、基类的公有成员在派生类中的访问权限由_基类___决定。 11、用static修饰的方法,称为静态方法。它们不是对象的方法,而是整个类的方法。静态方法只能处理用关键字_static___修饰的数据。 12、在Java中有一种叫作__构造方法__的特殊方法,我们在程序中用它来对类的对象成员进行初始化。 13、面向对象技术具有_封装性___、_继承性___、_抽象性___、多态性等特性。 14、Java中所有类都是类 _Object___的子类。 15、顺序执行以下两个语句的输出结果是: 10 。 String s = “我喜欢学习Java!”; System.out.println(s.length( )); 16、据程序的构成和运行环境的不同,Java源程序分为两大类: Application 程序和 Applet 程序。 17、如果一个Java源程序文件中定义有4个类,则使用Sun公司的JDK编译器javac编译该源程序文件将产生 4 个文件名与类名相同而扩展名为 class 的字节码文件。 18、开发与运行Java程序需要经过的三个主要步骤为 编辑源文件 、 编译器编译生成字节码文件 和 解释器执行 。 19、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是 Applet 类的子类并且存储该源程序文件的文件名必须为 MyApplet.java 。 20、 一个Java Application源程序文件名为MyJavaApplication.java,如果使用Sun公司的Java开发工具JDK编译该源程序文件并使用其虚拟机运算这个程序的字节码文件,应该顺序执行如下两个命令: javac MyJavaApplication.javajava MyJavaApplication 。 21、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码字符占用 2 字节内存空间,这样,无论是中文字符还是英文字符,每个都是占用2 字节内存空间。 22、在Java程序中定义的类有两种成员: 静态成员 、 实例成员 。 23、Java源程序是由类定义组成的,每个程序中可以定义若干个类,但是只有一个类是主类。在Java Application中,这个主类是指包含 main 方法的类;在Java Applet里,这个主类是一个系统类 Applet 的子类。 24、创建一个名为 MyPackage 的包的语句是 package MyPackage ; , 该语句应该放在程序的位置为: 程序中非注释行的第一行 。 25、 抽象或abstract 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。 最终后final 方法是不能被当前类的子类重新定义的方法。 26、多态是指 一种定义,多种实现 ,在Java中有两种多态,一种是使用方法的 重载 实现多态,另一种是使用方法的 覆盖 实现多态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值