首页编程java编程java字面量什么意思,我是一个java初学者,分不清字符串与字面量的区别

java字面量什么意思,我是一个java初学者,分不清字符串与字面量的区别

编程之家 2023-10-13 78次浏览

大家好,感谢邀请,今天来为大家分享一下java字面量什么意思的问题,以及和我是一个java初学者,分不清字符串与字面量的区别的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

java字面量什么意思,我是一个java初学者,分不清字符串与字面量的区别

我是一个java初学者,分不清字符串与字面量的区别

这个问题其实牵扯就有点多了

在java里,除了int,long等基本类型外

其余都是类,包括String,所以String是个类,他是个封装了操作字符串的方法的类

java字面量什么意思,我是一个java初学者,分不清字符串与字面量的区别

比如String

s=new

String("a

java字面量什么意思,我是一个java初学者,分不清字符串与字面量的区别

string")

"a

string"是个字符串对象

s也是个字符串对象,使用String类的构造器方法构造的一个字符串实例(对象)

字符串在java中就是一个对象

一般来说,String都是指String这个类(首字母大写),string指的是字符串年

说的不清楚,建议去看看thinking

in

java,我想你应该是学过其他语言的,所以这本书应该比较适合你肯,里面讲面向对象思想讲的很好

什么是Java字节码

它是程序的一种低级表示,可以运行于Java虚拟机上。将程序抽象成字节码可以保证Java程序在各种设备上的运行

Java号称是一门“一次编译到处运行”的语言,从我们写的java文件到通过编译器编译成java字节码文件(.class文件),这个过程是java编译过程;而我们的java虚拟机执行的就是字节码文件。不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只要符合java虚拟机的规范,那么它就能够执行该字节码文件。

JAVA程序的运行

因为Java具有跨平台特性,为了实现这个特性Java执行在一台虚拟机上,这台虚拟机也就是JVM,Java通过JVM屏蔽了不同平台之间的差异,从而做到一次编译到处执行。JVM位于Java编译器和OS平台之间,Java编译器只需面向JVM,生成JVM能理解的代码,这个代码即字节码,JVM再将字节码翻译成真实机器所能理解的二进制机器码。

字节码是怎么产生的?

我们所编写的程序都是.java格式,通常在执行的时候也许点击一下eclipse的运行键就可以在控制台看到运行结果,但是也可以更酷一些,如果你装了JDK,那就可以直接在以命令行的方式编译运行你的.java文件,编译后会形成.class文件,这个.class文件即字节码。

字节码怎么解读?

上图是编译好的字节码文件,即一堆16进制的字节,如果使用IDE去打开,也许看到的是已经被反编译的我们所熟悉的java代码,但这才是纯正的字节码

这里只介绍字节码由哪些部分组成,具体的意思自行百度或者看文尾的连接,有较为详细的讲解

上图即字节码文件的组成部分, Class文件的结构不像XML等描述语言那样松散自由。由于它没有任何分隔符号,

所以,以上数据项无论是顺序还是数量都是被严格限定的。哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变,如上图左侧即每一部分规定的长度

魔数(Magic Number)

魔数是用来区分文件类型的一种标志,一般都是用文件的前几个字节来表示。

比如0XCAFE BABE表示的是class文件,那么有人会问,文件类型可以通过文件名后缀来判断啊?是的,但是文件名是可以修改的(包括后缀),那么为了保证文件的安全性,将文件类型写在文件内部来保证不被篡改。

至于为什么是CAFE BABE估计大家也能猜到,程序员与咖啡的不解之缘

版本号(Version)

版本号含主版本号和次版本号,都是各占2个字节。在此Demo种为0X0000 0033。其中前面的0000是次版本号,后面的0033是主版本号。通过进制转换得到的是次版本号为0,主版本号为51。高版本的JDK能向下兼容以前版本的Class文件,但不能运行以后版本的Class文件,即使文件格式未发生任何变化.这就是target参数的用处,可以在使用JDK 1.7编译时指定-target 1.5

常量池(Constant Pool)

常量池是Class文件中的资源仓库,量池中主要存储2大类常量:字面量和符号引用。字面量如文本字符串,java中声明为final的常量值等等,而符号引用如类和接口的全局限定名,字段的名称和描述符,方法的名称和描述符。常量池是一个表结构,在表的内容前有一个类型的计数器,表示常量池的长度

上面的表中描述了11中数据类型的结构,其实在jdk1.7之后又增加了3种(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。这样算起来一共是14种

访问标志(Access_Flag)

访问标志信息包括该Class文件是类还是接口,是否被定义成public,是否是abstract,如果是类,是否被声明成final。通过上面的源代码,我们知道该文件是类并且是public。

0x 00 21:是0×0020和0×0001的并集。其中0×0020这个标志值涉及到字节码指令

类索引(This Class Name)

类索引用于确定类的全限定名

0×00 03表示引用第3个常量,同时第3个常量引用第19个常量,查找得”com/demo/Demo”。#3.#19

父类索引(Super Class Name)

0×00 04同理:#4.#20(java/lang/Object)

接口索引(Interfaces)

通过上边字节码图可以看到,这个接口有2+n个字节,前两个字节表示的是接口数量,后面跟着就是接口的表。我们这个类没有任何接口,所以应该是0000。果不其然,查找字节码文件得到的就是0000。

字段表集合(fields)

字段表用于描述类和接口中声明的变量。这里的字段包含了类级别变量以及实例变量,但是不包括方法内部声明的局部变量。接下来就是2+n个字段属性。我们只有一个属性a,所以应该是0001。查找文件果不其然是0001。

该区域含有字段的访问标志,访问权限,字段的名称索引,字段的描述符索引,属性表

描述符的作用就是用来描述字段的数据类型、方法的参数列表和返回值。而属性表就是为字段表和方法表提供额外信息的表结构。对于字段来说,此处如果将字段声明为一个static final msg="aaa"的常量,则字段后就会跟着一个属性表,其中存在一项名为ConstantValue,指向常量池中的一个常量,值为的"aaa"。

方法(methods)

包含访问标志表,方法名索引,方法描述符索引,属性表数量,等

Attribute

0×0001:同样的,表示有1个Attributes了。

0x000f:#15(“SourceFile”)

0×0000 0002 attribute_length=2

0×0010: sourcefile_index=#16(“Demo.java”)

SourceFile属性用来记录生成该Class文件的源码文件名称。

“Java不显式支持二进制”是什么意思

确实,在Java早期的版本(Java 1.0至1.6)中,并没有直接支持二进制字面值的语法,这也就是说,你不能使用类似于0b101010这样的二进制字面值来表示整数。不过,在较新的版本(Java 1.7及以上)中,Java增加了对二进制字面值(即以 0b或 0B开头的数字字符串)的支持,这样你就可以使用类似于0b101010这样的二进制字面值来表示整数了。

在早期的 Java版本中,如果你想要使用二进制字面值来表示整数,通常的做法是使用八进制或十六进制来代替,然后再将它们转换为二进制表示。例如,如果你想要表示二进制数101010,你可以使用十六进制数0x2A来代替,二进制数10100011001可以使用八进制数05061来代替,然后再将它们转换为二进制表示就可以了。

在 Java 1.7及以上的版本中,可以使用类似于以下的语法来定义二进制数:

Copy code

int b1= 0b101010;// 42

byte b2= 0b1101;// 13

这对于进行位操作等操作非常方便。需要注意的是,前导的 0b或 0B是必须的,否则编译器将无法区分数值和其他字符串。

总的来说,Java在早期的版本中不支持二进制字面值,但是在较新的版本中增加了该功能,使得使用二进制字面值来表示整数变得更为方便和直观。

JavaSE是什么

Java se是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。

用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算,从此Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Java语言恐怕是稳居网路应用程序语言的首选了,这都要归功于它高度的安全性以及跨平台的特性,几乎在目前所有的电脑平台上您都可以见得到Java的芳踪。

Java se用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序,Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE提供了基础。

扩展资料:

Java se用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序,Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE提供了基础。

过去很可能会有不少人抱怨Java虽然有着相当不错的跨平台以及安全防护等特性,但是它的执行速度远远不及C++等各种传统惯用的程序语言。不过这次SunMicrosystem可是有备而来的,不仅在执行速度上有大幅度的改革,而且在内容上也有做了一些修改以及增强。

参考资料:

JAVA SE-百度百科

java字面量什么意思和我是一个java初学者,分不清字符串与字面量的区别的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

java ioc是什么意思,求大神,java中IOC具体是个什么意思 什么是java的值传递 java 类之间数值的传递