在Java的内存分配中,总共3种常量池: Java 常量池详解(二)class文件常量池 和 Java 常量池详解(三)class运行时常量池 1.字符串常量池(String Constant Pool...) 在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代 在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆..., 只不过方法区的实现从永久代变成了元空间(Metaspace) 1.1:字符串常量池在Java内存区域的哪个位置?...(堆内是可以进行回收的,然后方法区也是能回收的,但是本身区域内存比较少,如果用的字符串常量太多了,也会抛java.lang.OutOfMemoryError:PermGenspace 异常) 1.2:字符串常量池是什么...如果常量池中没有此字符串, 会将此字符串放入常量池中后, 再返回 native实现代码: \openjdk7\jdk\src\share\native\java\lang\String.c Java_java_lang_String_intern
字符串 字符串字面量:就是指这个字符串本身,比如”Java”,”Hello”。...常量池 class常量池 Java源文件编译之后得到的class文件,其中有项信息就是常量池,保存有字面量和符号引用,比如 public class JvmClass1 { final int b=...c=”java”; String d=”abcd”; String e=”java”; String f=new String(“java”); } } 运行时常量池 && 字符串常量池 class常量池被加载到内存后...运行时常量池相对于class常量池的一个特点是具有动态性,Java不要求所有常量在编译器产生,可以在运行时产生常量加入常量池,例如String类的intern()。...意思是当一个字符串对象调用intern方法,如果池中已经存在值相等(通过String的equal函数比较)的字符串常量,就返回常量池中的常量,也就是堆中对应实例的引用。否则将这个字符串加入常量池。
线程池概述 什么是线程池? 线程虽然是轻量级进程,尽管线程比进程创建和销毁所消耗 的资源要少。...但是如果线程的创建和销毁频率高了,开销也还是有的,为了进一步提高效率,引入了线程池,池子里面放着事先创建好的线程.后面用的时候直接从池子里面拿,如此速度就快了,但是代价线程池所需的空间,线程池就是以空间换时间...如果从线程池直接拿的话,就省去了切换到内核态的时间,同时当线程不用的时候直接放回到线程池即可。...Java标准库中的线程池 标准库中线程池为ThreadPoolExecutor类,该类中最主要是包含两类线程,一类是核心线程,另一类是非核心线程。...; } } 运行结果: 简单实现线程池 线程池的基本逻辑 线程池事先存放着准备好的线程,当有任务提交入池的时候,实际上是放入了阻塞队列中,然后线程池中的线程调度执行这些任务,在java中的线程池有核心线程和非核心线程
类型 56.7D 字节类型byte类型 范围 -128--127 字符类型char 'a' 每个字符代表一个编码 ,每个编码是用数字表示的 'a' --> 98 字符串类型...Stringstr="字符串类型"; String str1="字符串类型"; str == str1 布尔类型boolean:false(默认值)...= str1){ System.out.println("两个字符串对象不相等"); } if (str !...由自己面向整个装修过程开始转向面向装修公司 在java是把世界世生活中的实际东西,转换成我们的计算机语言。 ...学生 :学习 吃饭 睡觉 打游戏 java中用类来描述现实生活中的东西 Student{ int age; String name; String sex
学习完了类之后,我们将继续学习一个Java中的重点内容“继承” 继承 1.1 为什么需要继承 举例: 在Cat类中和Dog类中我们发现有很多一样的地方,这样写太浪费空间和内存了 我们可以把它相同的地方都用一个类来表示...从继承概念中可以看出继承最大的作用就是:实现代码复用,还有就是来实现多态(后序讲) 1.3 继承的语法 在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下: 修饰符 class...都是Java中的关键字 2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段 3....组合表示对象之间是has-a的关系,比如:学校 组合和继承都可以实现代码复用,应该使用继承还是组合,需要根据应用场景来选择,一般建议:能用组合尽量用组合 总结: 后期博主会陆续更新Java...SE的知识 如有不足之处欢迎补充交流 看到这里的友友们,支持一下博主,来个免费三连,感谢!
如果服务器只为单个域提供宿主环境,则可以忽略键/值对用Java连接到服务器import java.io.IOException;import java.net.Socket;import java.util.Scanner...一个字符串构建一个URL对象:URL url = new URL(urlString); 如果只是想获得资源的内容,可以使用URL类中的openStream方法。...URI是个纯粹的语法结构,包含用来指定web资源的字符串的各种组成部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。...setRequestProperty总览全局的方法:设置对特定协议起作用的任何“名-值(name-value)对”例如访问一个有密码保护的Web页:将用户名、冒号和密码以字符串形式连接一起String...input = username + ":" + password;计算上一步骤所得字符串的Base64编码Base64.Encoder encoder = Base64.getEncoder();String
1.初识Java 1.1Java是什么 Java是一种优秀的程序设计语言。...1.使用记事本或者IDEA(集成开发环境)编写Java源程序 2.使用javac.exe编译器编译Java源程序,生成xxx.class的字节码 语法格式为:javac xxx.java 3.使用java...运行xxx.class字节码文件 语法格式为:java xxx.java 注意:在运行Java程序前,必须先安装好JDK(Java Development Kit即Java开发工具包),JDK里面就包含了...javac和java工具,Java程序最终是在JVM(Java虚拟机)中运行的。...JRE(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。
,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常 1.3.2遍历数组 方法一:for循环 方法二:for each(增强for循环) 方法三:把数组转变为字符串...,然后返回 注意:使用Arrays.时导入包import java.util.Arrays; 知识拓展: 2.数组是引用类型 2.1初识JVM的内存分布 内存是一段连续的存储空间,主要用来存储程序运行时数据的...3.2例题2 1.数组对象是在堆上的 2.引用变量目前是在main函数里面的,它属于局部变量,当函数结束就会被回收 4.数组的应用 4.1自主实现Arrays.toString(将数组以字符串的方式打印...)功能 和C语言中的断言相比,Java中使用断言的情况较少。...Arrays在使用前要说明一下 import java.util.Arrays; Arrays.copyOf的使用很方便,不仅可以拷贝数组,还可以控制被拷贝数组的大小: 还可以实现部分拷贝:
这一切都是源于JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池。...JVM通过字符串常量池查找不到内容为droid的字符串对象存在,那么会创建这个字符串对象,然后将刚创建的对象的引用放入到字符串常量池中,并且将引用返回给变量str1。...intern 对于上面使用new创建的字符串对象,如果想将这个对象的引用加入到字符串常量池,可以使用intern方法。...字符串常量池实现的前提条件就是Java中String对象是不可变的,这样可以安全保证多个变量共享同一个对象。...字符串常量池存放的是对象引用,不是对象。在Java中,对象都创建在堆内存中。 更新验证,收到的很多评论也在讨论这个问题,我简单的进行了验证。
1.继承的概念&作用 在Java中,继承是面向对象编程的三大基本特性之一(还有封装和多态),允许一个类(子类/继承类)继承另一个类(父类/基类)的属性和方法 继承的核心目的是: 1.子类能够在不改变父类原有特性的基础上进行扩展...以及它们之间的调用关系等到讲多态的时候再介绍 4.super关键字 4.1 使用super访问父类的成员 在Java中,super关键字用于在子类中引用其父类的成员。...如果想要访问父类的同名变量就需要借助super关键字 如果想要访问父类和子类中方法名一样,参数列表也一样的成员方法时,也可以借助super关键字 4.2 super&this的共性和区别① 共性: 1.都属于Java...2.从访问范围来看,this可以访问当前对象中的多有成员,但是super只能访问当前对象中从父类继承的成员 5.构造方法&初始化顺序 5.1 父类和子类的构造关系和执行顺序 当创建一个子类对象时,Java...无法在外部包的非子类中通过子类的引用来访问 注意二:在子类中,只能通过子类自己的引用来访问父类的protected成员;无法在子类中通过其他子类的引用来访问父类的protected成员 6.final关键字 在Java
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException...public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException...public boolean java.lang.Object.equals(java.lang.Object)...public native int java.lang.Object.hashCode() public final native java.lang.Class...java.lang.Object.getClass() public final native void java.lang.Object.notify
Java是一门程序设计语言,它有三个版本,Java SE(标准版)、Java EE(企业版)和Java ME(微型版)。而Java SE只是一个使用Java进行编程的规范、框架,它不是一门编程语言。...Java SE(java standard edition),一般包括jdk、jre以及各种API文档等。 Java SE(Java Platform,Standard Edition)。...Java SE以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。...Java SE包含了支持Java Web服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。...Java SE = jdk + jre ·jdk是开发Java程序用的; ·jre是运行java程序用的; Java SE就是Java应用程序,是一种分类,不是什么软件。
注意事项: 1. catch 只能处理对应种类的异常 java中一切皆是类,异常也是类,因此catch只能捕获相应的异常“类型”。...at demo02.Test.main(Test.java:12) after try catch 由于 Exception 类是所有异常类的父类....二、Java异常体系 Java中的异常分为两大类:一类叫做受查异常,另一类叫做非受查异常。...下图为Java内置的异常类之间的继承关系: 顶层类 Throwable 派生出两个重要的子类, Error 和 Exception 其中 Error 指的是 Java 运行时内部错误和资源耗尽错误....三、自定义异常类 Java 中虽然已经内置了丰富的异常类, 但是我们实际场景中可能还有一些情况需要我们对异常类进行扩展, 创建符合我们实际情况的异常.
静态代理发生在编译期间。收到创建的。在编译时就已经将接口,被代理类,代理类等确定下来。代理类和代理对象都要实现同一个接口,同时,代理对象要操控目标...
栈中有共享池的概念,比 如下面例子中,sz="hello";在栈中创建一个String对象引用变量sz,然后看看栈中有没有"hello",如果没有,则将"hello"存 放进栈,并令sz指向”hello...对于int, float 类型的变量也是一样的有这种共享池的概念, 更多请看:https://blog.csdn.net/qq_44639795/article/details/103124551
; do while 循环最后的分号不要忘记 一般 do while 很少用到, 更推荐使用 for 和 while. 4.输入输出 4.1输出控制台 4.2 从键盘输入 使用 Scanner 读取字符串.../整数/浮点数 知识拓展:什么是Java中的流?...Java中的流 (有点不太懂,以后再深入学习流) 5.Java中如何生成随机数呢? 总结:关于逻辑控制,Java与C语言大多一样。可以类比学习。
1.认识异常 1.1异常 在Java中,将程序执行过程中发生的不正常行为称为异常。...System.out.println(arr.length()); 1.2异常的体系结构 Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception Error:指的是Java...在Java中,异常处理主要的5个关键字:throw、try、catch、final、throws。 2.2异常的捕获 异常处理的意义在于发现异常后能否执行后续正常代码。...但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return. 2.3异常的抛出 在Java中,可以借助throw
a) Object类可以接受所有的引用数据类型(数组、类、接口),为了让Object类可以接受Java中一切内容,引入包装类,把基本类型的数值封装到类的对象之中就产生了包装类。...以整型为例子 : 装箱: int→Integer 拆箱:Integer→int 2.自动拆装箱 Java编译器的优化,使用包装类就和使用基本类型一模一样。 自动拆装箱是一种java语法糖。...(借助编译器实现了基于编译器的新语法,增强了Java程序的可读性,便于开发人员使用和维护。)...Java中的语法糖只存在于编译期, 在编译器将 .java 源文件编译成 .class 字节码时, 会进行解语法糖操作, 还原最原始的基础语法结构,如下为编译后的字节码: 有了自动拆装箱,使用包装类就和使用基本类型完全一致...3.当使用整型包装类的自动拆装箱时,JVM会缓存相应的数值(类似字符串常量池,详见博主上期的博文:认识String类) Integer常量池,默认在-128到127之间的取值,都会缓存到常量池中。
JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,这就是我们今天要讨论的核心,即字符串池(String Pool)。字符串池由String类私有的维护。...字符串池的优缺点:字符串池的优点就是避免了相同内容的字符串的创建,节省了内存,省去了创建相同字符串的时间,同时提升了性能;另一方面,字符串池的缺点就是牺牲了JVM在常量池中遍历对象所需要的时间,不过其时间成本相比而言比较低...intern方法使用:一个初始为空的字符串池,它由类String独自维护。...Java语言规范(Java Language Specification)中对字符串做出了如下说明:每一个字符串常量都是指向一个字符串类实例的引用。字符串对象有一个固定值。...这是因为,字符串字面量拼接操作是在Java编译器编译期间就执行了,也就是说编译器编译时,直接把"java"、"language"和"specification"这三个字面量进行"+"操作得到一个"javalanguagespecification