
java语言疑惑解答
菜到怀疑人生
这个作者很懒,什么都没留下…
展开
-
常量在什么时候被放入常量池?
先来了解一下常量池,常量池分为方法区中的运行时常量池和class文件中的常量池,class文件中的常量池在编译时确定,其中包括符号引用和字面量(文本字符串,被声明为final的变量的值),运行时,JVM从中读取数据到方法区的运行时常量池,运行时常量池可以在运行时添加常量,常量可以在运行时或编译时被放入常量池,编译期放入到类文件的常量池中,运行时放入到方法区的运行时常量池中,JDK1.7后运行时常量原创 2018-01-30 16:57:13 · 4333 阅读 · 6 评论 -
java非静态实名内部类加载顺序问题
原创 2018-01-29 16:46:38 · 508 阅读 · 0 评论 -
java匿名内部类详解
匿名内部类,顾名思义,就是没有名字的类,匿名内部类格式如下:new name(parameter){ ......}name:父类或是接口的名字。parameter:若name为父类,则parameter为父类构造函数的参数。匿名内部类具有一系列的限制,原因待会解释:1、不能具有static成员域和成员函数和类。2、不能具有static fin原创 2018-02-06 20:56:44 · 7849 阅读 · 2 评论 -
Java基本数据类型与其封装类问题
基本数据类型与其封装类的关系如下: 基本数据类型 封装类 boolean Boolean char Character byte Byte short Short ...原创 2018-01-31 20:12:09 · 344 阅读 · 3 评论 -
java实名内部类详解
实名内部类是个很神奇的东西,当有static修饰class时,可以具有静态成员域和静态成员方法,当没有static修饰时,不能具有静态成员方法和静态成员域,但却可以具有static final修饰的成员域(常量池中有字面量的成员域)。为什么?为什么非static修饰的实名内部类可以应用外部类的成员域和成员方法呢?为什么不可以具有静态成员函数?为什么不可以具有静态代码块? 先来说说实名...原创 2018-01-19 20:40:16 · 1035 阅读 · 0 评论 -
个人理解——java中的import
顺便复习一下类加载器,java中的双亲委派模型如下:启动类加载器:负责加载存放在JDK\jre\lib下或是Xbootclasspath参数指定的路径中能被JVM识别的类(不会加载不识别的类),无法在java程序中引用该加载器。扩展类加载器:负责加载存放在JDK\jre\lib\ext下或是由java.ext.dirs系统变量指定的路径中的所有类库,可被java程序引用。应用程序加载器:负责加载用...原创 2018-02-10 21:16:16 · 820 阅读 · 0 评论 -
利用newInstance与new创建对象的区别
当我们用new创建对象时,JVM做了以下事情:1、若对应类的class文件未加载,加载对应的class文件,进行类的链接、初始化操作。2、根据方法区中的类信息向堆内存申请空间。3、调用构造函数。由于运用new创建实例比较熟悉,就不给出实例证明了。利用newInstance创建对象时,是默认JVM已经完成了对应类的加载、链接工作的,下面给出个实例:package原创 2018-02-05 16:33:02 · 2722 阅读 · 3 评论 -
java中的getBytes()问题
我们知道java中的char编码方式为unicode,来看看下面的代码public class Try { public static void main(String[] args) { // TODO code application logic here String x="我"; byte[] a=x.getBytes();原创 2018-01-27 19:46:38 · 2530 阅读 · 0 评论 -
java非静态实名内部类中的static final问题
简单来说,一、static final修饰的只能是在常量池有字面量的数据类型,二、不能是引用类型,从设计者角度来说,为什么当初一可以通过,二不行? 一可行,最主要是为了提高程序的执行速度,因为static final在方法区中具有唯一性,只需要加载一次,在new对象时不需要分配堆内存,假设我们把static去掉,则每次new都需要分配堆内存,而final修饰在常量池中有字面量的原创 2018-01-28 10:00:39 · 565 阅读 · 1 评论 -
为什么"String a=“123”;String b=a+“234”;"中的b的字符串不在字符串常量池中
代码如下:public class Try { public static void main(String[] args) { String a="123"+"234"; String b="123"; String c=b +"234"; }}问题:String c的值不是相当于“123”+“234”吗?为什么原创 2018-01-18 10:45:18 · 1788 阅读 · 0 评论 -
java中的锁机制
JVM给每个对象和类都维护一个锁,分别称为对象锁和类锁,想要执行synchronized修饰的代码块或方法,必须获取对应的锁,执行非静态方法和代码块时,需要获取对象锁,执行静态方法或是静态代码块时,需要获取类锁。一个类实例对应一个对象锁,一个类对应一个类锁以对象锁为例,这意味着当一个线程想执行加锁的非静态代码或代码块时,它会尝试获取对象锁,获取成功,将执行对应的方法或代码块,执行完毕后将归还锁,否...原创 2018-03-26 12:13:27 · 305 阅读 · 0 评论