- 博客(13)
- 收藏
- 关注
原创 Maven工程的三种打包类型
Maven默认会把我们的项目打包成jar包。jar包是一种与平台无关的文件格式,主要是对class文件进行打包 ,比如写了一个功能需要在其他项目中使用,就可以将这些类以及相关资源文件打成一个jar包,然后在需要的项目中进行调用。war包是一个可以直接运行的 web模块,通常应用于web项目,将项目打包成war包部署到Tomcat等容器中,在Tomcat成功启动后,就会自动解压该包,那么web项目就会自动发布。在介绍完什么是jar包、war包,大家应该清楚我们写的每个项目本质上就是一种包,只是功能不同。
2023-07-20 17:35:02
603
原创 ImportError:cannot import name ‘TypeAlias‘ from ‘typing_extensions‘
在安装完pytorch后,测试导入pytorch出现一下问题。原因可能是: typing_extensions过时了。解决方法:在命令行输入以下指令。
2023-04-26 22:13:48
7320
2
原创 Java对象那些事
(这里的成员变量存于堆中作为对象的实例数据,静态变量在类加载时就存于方法区,局部变量则是等执行方法时加载到局部变量表,事先一个还是存于class文件,变量的操作都是对其引用进行操作,真实数据值在常量池中)而变量只是快捷方式。数组长度(只有数组对象才有):如果对象是数组类型,因为JVM虚拟机可以通过Java对象的元数据信息确定Java对象的大小,但是无法从数组的元数据来确认数组的大小,所以用一块来记录数组长度。,初始化该对象成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。
2023-04-26 14:25:29
139
原创 基础数据类型、引用数据类型
对于基本类型变量num,赋值运算符将会直接修改变量的值,原来的数据将被覆盖掉,被替换为新的值。对于引用类型变量str,赋值运算符只会改变变量中所保存的对象的地址信息,原来对象的地址被覆盖掉,重新写入新对象的地址数据。基本类型变量一般变量存储具体的数值内容,如果在方法体中(局部变量)则分配在栈中(虚拟机栈的局部变量表),如果作为类的成员变量则跟随对象在堆中,总之int a=10只占据一块内存。引用类型:除了基本类型以外的所有类型,比如String是引用类型,我们自己创建的类也属于引用数据类型。
2023-04-26 11:56:06
145
原创 成员变量、静态变量、局部变量
一般的引用类型通过new创建实例,每个变量指向堆中的实例(但是String除了new对象,也可以通过“字面量”创建对象,对象引用创建后位于字符串常量池,实际对象也是在堆中,只是可能会出现多个变量指向同一个对象)。与String类型类似,对于某些值,比如整型类型(-128~127)之间的数放在一个单独的缓存池中,那么在Integer类型直接赋常量时,也会出现多个变量指向一个对象的情况。静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。静态变量随着类的加载而存在,随着类的消失而消失。
2023-04-26 11:45:15
168
原创 可变数据类型和不可变数据类型、String的不可变?
图中,指向1是可变的,指向2不可变。当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称为可变数据类型,当可变数据类型改变时它实际上是更改了内存中的内容。指向的是一个字符数组,字符串中的字符就是用这个value变量存储起来的,并且用final修饰,也就是说value一旦赋予初始值之后,value指向的地址就不能再改变了。常量池的设计是为了优化性能,减少重复字符串的存储,而如果String对象的改变,会引起常量池的改变造成很多逻辑错误,增加损耗。
2023-04-22 17:07:28
556
原创 常量池的分类?
在JVM里实现的string pool功能的是一个StringTable类,它是一个哈希表,里面存的是驻留字符串(也就是我们常说的用双引号括起来的)的引用(而不是驻留字符串实例本身),也就是说在堆中的某些字符串实例被这个StringTable引用之后就等同被赋予了”驻留字符串”的身份。符号引用包括:1.类和方法的全限定名 2.字段的名称和描述符 3.方法的名称和描述符。运行时常量池也是每个类都有一个,也就是class常量池被加载到内存之后的版本,是方法区的一部分。不同之处是:符号引用可以被解析为直接引用。
2023-04-21 20:54:35
65
原创 字符串常量池
执行玩语句10、11、12字符串常量池又增加了“hello”、“hel”、“lo”对象,所以语句13指向的都是常量池的“hello”对象。在代码执行过程中,语句一由于new关键字在堆中创建了“he”、“llo”两个对象,并且创建了一个StringBuffer对象拼接字符串,在toString时在堆中创建了“hello”对象。类加载阶段在常量池中创建了一个对象"abc"。语句1,2,3分别创建了三个引用s1(指向语句1的堆中对象),s2(指向字符串常量池中的"abc"对象),s3(指向语句3的堆中对象)。
2023-04-21 20:52:16
1294
原创 方法区介绍及演变
方法区主要用于存储JVM加载的每一个类的信息,包括类相关信息、字段信息、方法信息、常量池(运行时常量池、字符串常量池)、静态变量、方法表、编译器编译后的代码。方法区是线程共享的;当有多个线程都用到一个类的时候,而这个类还未被加载,则应该只有一个线程去加载类,让其他线程等待;方法区的大小是不固定的,JVM可以根据需要对方法区进行扩展,但如果类过多可能会导致方法区溢出,我认为这是JDK1.8以后将方法区挪到本地内存的原因之一。类相关信息修饰符(public final)
2023-04-21 15:15:12
156
1
原创 关于Java类加载、双亲委派机制
此时并未将数据加载进内存,需要等验证阶段通过,才会在内存中为类数据分配空间。并且该class对象并未进行初始化,即没有执行构造函数。验证:连接阶段的第一步,保证class文件的字节流符合JVM规范,不会导致JVM出现安全问题。文件格式验证:如是否以魔数 0xCAFEBABE 开头、主、次版本号是否在当前虚拟机处理范围之内、常量合理性验证等。保证输入的字节流能正确地解析并存储于方法区之内,格式上符合描述一个 Java类型信息的要求。
2023-04-20 20:25:23
177
1
原创 JDK、JRE、JVM的关系
刚入门Java时,大家推荐使用IDEA(也可以是其他类似的软件)来进行开发,我就认为这个软件是Java开发的重点。JRE(Java Runtime Environment):是Java的运行环境,即运行已编译Java程序(字节码文件)所需的所有内容的集合。JDK(Java Development Kit):是Java的开发工具包,包含了JRE,以及开发工具,比如Java.exe(运行java程序)、javac.exe(编译工具)、javaw.exe(运行GUI程序)等。
2023-04-20 12:50:44
108
1
原创 使用exe4j工具打包可执行程序
使用IDEA编辑java代码,使用的jdk版本是corretto-18.0.2(IEDA软件里面下载的),打包成jar文件之后根据网上的教程使用exe4j工具将jar包转成.exe文件。(要在环境变量中配置的jdk版本要跟IDEA里编译代码使用的JDK保持一致,我的理解是执行这个文件需要同样的jdk环境)将JDK换成了自己下载的17版本之后重新编译了代码再打包成jar,最后转成exe就没有问题了。其实也不知道这样解决的原理是什么,就是瞎猫碰上死耗子,希望有用。
2023-03-25 17:29:34
510
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人