Java基础问题笔记
学习Java中常见的问题和易混淆的知识点记录
去追风,去看海
这个作者很懒,什么都没留下…
展开
-
JVM内存模型简单理解
Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另外一个线程可见。从抽象的角度看,JMM定义了线程和主内存之间的抽象关系:线程之间共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读 | 写共享变量的副本。本地内存是JMM的一个抽象概念,并不是真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他硬件和编译器优化。其关系模型如下图: ...原创 2020-07-03 17:18:51 · 185 阅读 · 0 评论 -
Java中反射的实现过程和作用?JVM加载class文件的原理是什么?
Java中反射的实现过程和作用?知识点:反射实现过程:Java语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某个类、类中的方法以及属性等。反射的实现主要借助以下四个类:Class:类的对象,Constructor:类的构造方法,Field:类的属性对象,Method:类中的方法对象。作用:反射机制指的是在程序运行时能够获得自身的信息。在Java中,只要给定类的名字,那么就可以通过反射机制来获取类的所有信息。JVM加载class文件的原理是什么?知识点:..原创 2020-07-03 16:51:52 · 438 阅读 · 0 评论 -
Java中的LongAdder和AtomicLong简单理解和区别
知识点:JDKJDK1.8引入LongAdder类。CAS机制就是在一个死循环内,不断尝试修改目标值,直到修改成功。如果竞争不激烈,那么修改成功的概率就很高。否则,修改失败的概率就很高,在大量修改失败时,这些原子操作就会进行多次循环尝试,因此性能就会受到影响。结合ConcurrentHashMap的实现思想,应该可以想到对一种传统AtomicInteger等原子类的改进思路。虽然CAS操作没有锁,但是像减少粒度这种分离热点的思路依然可以使用。将AtomicInteger的内部核心数据value分离成原创 2020-07-03 15:31:14 · 490 阅读 · 0 评论 -
Java 中的异常处理1
Java 异常类层次结构图在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable类Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。 Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java 虚拟机运行错误(Vi...原创 2020-06-07 11:32:32 · 204 阅读 · 0 评论 -
Java基础常见面试题8
1.简述线程、程序、进程的基本概念。以及他们之间的关系?线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。 程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。..原创 2020-06-07 11:17:34 · 136 阅读 · 0 评论 -
Java基础常见面试题7
1.对象的相等与指向他们的引用相等,两者有什么不同?对象的相等,比的是内存存放内容是否相等。而引用相等,比较的是它们指向内存地址是否相等。2.在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?帮助子类做初始化工作。3. == 与 equals(重要)== :它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用 数据类型==比较的是内存地址)equals : 它的作用也是判断两个对象是否相等。...原创 2020-06-07 11:06:08 · 139 阅读 · 0 评论 -
Java基础常见面试题6
1.创建一个对象用什么运算符?对象实体与对象引用有何不同? new运算符,new创建对象实例(对象实例在堆内存中),对象医用指向对象实例(对象引用放在栈内存中)。一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球)。2.什么是方法返回值?返回值在类的方法里的作用是什么?方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用:接收出结果,使得它可..原创 2020-06-07 09:35:09 · 228 阅读 · 0 评论 -
Java基础常见面试题5
1.import java 和 javax有什么区别?刚开始的时候JavaAPI所必需的包是java开头的包,javax当时只是扩展API包来使用。然而随着时间推移,javax包移动到java包太麻烦了,最终会破坏一堆现有的代码。因此,最终javax包将成为标准API的一部分。所以,实际上java和javax没有区别。2.接口和抽象类的区别是什么?接口的方法默认是public,所有方法在接口中不能有实现(Java8后接口方法可以有默认实现)抽象类可以有非抽象的方法 接口中的实例变量默认原创 2020-06-05 17:06:41 · 129 阅读 · 0 评论 -
Java基础常见面试题4
1.String StringBuffer 和StringBuilder 的区别是什么? String为什么是不可变的?可变性简单来说:String类中使用final关键字字符数保护字符串,private final char value [] ,所以String对象是不可变的。而StringBuilder与StringBuffer都继承于AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串 char [ ] val...原创 2020-06-05 15:47:01 · 115 阅读 · 0 评论 -
Java基础常见面试题3
1.字符型常量和字符串常量的区别?形式上:字符常量是单引号引起的一个字符,字符串常量是双引号引起的若干个字符 含义上:字符常量相当于一个整型值(ASCII值)可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放的位置) 占内存大小: 字符常量占2个字节 字符串常量占若干个字节(至少一个字符结束标志)2.构造器Constructor是否可被override?父类的私有属性和构造方法并不能被继承,所以Constructor也就不能被override(重写),但是可以over..原创 2020-06-03 22:57:23 · 147 阅读 · 0 评论 -
java基础常见面试题2
1. Java 和 C++的区别都是面向对象的语言,都支持封装、继承和多态 Java不提供指针来直接访问内存,程序内存更加安全 Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承 Java有自动内存管理机制,不需要程序员手动释放无用内存2.什么是Java程序的主类?应用程序和小程序的主类有何不同?一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。然而Java小程序中,这个主类是一个继承自系统原创 2020-06-03 22:14:22 · 150 阅读 · 0 评论 -
java基础常见面试题1
1.面向对象和面向过程的区别面向过程优点:性能比面向对象高,因为类的调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux、Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计低耦合的系统,使系统更加灵活、更加易于维护缺点:性能比面向过程低2 . java语言有哪些特点简单易学; 面向对象(封装,继承,多态); 平台原创 2020-06-03 20:25:49 · 124 阅读 · 0 评论