
java
孙晨c
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
Java中的栈、堆、元空间浅析以及创建对象流程
存放方法、变量存放对象存放类的信息原创 2022-12-16 12:03:28 · 611 阅读 · 1 评论 -
java创建对象的五种方式
new反射:使用Class类的forName()方法得到指定类对象,然后使用类对象的newInstance()方法创建对象克隆:实现Cloneable接口,需要已经有一个分配了内存的对象,使用这个已经创建的对象克隆新对象反序列化:实现Serializable接口,将一个对象序列化到磁盘上,采用反序列化可以将磁盘上的字节码文件加载到内存中。工厂模式...原创 2021-02-24 23:59:21 · 289 阅读 · 0 评论 -
Java单例模式-懒汉式、恶汉式、静态内部类、枚举以及线程安全问题
Java的单例模式常见的分为懒汉式、饿汉式、静态内部类、枚举通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数额控制并节约系统资源。饿汉式:public class Singleton { private static Singleton instance = new Singleton(); private Singleton...原创 2020-03-26 08:52:57 · 363 阅读 · 0 评论 -
util.Date与sql.Date的异同以及相互转换
Java中有两个Date类一个是java.util.Date通常情况下用它获取当前时间或构造时间另一个是java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分两个类型的时间可以相互转化这三个类都是java.utl.Date的子类util.Date转sql.Date Date utilDate = new Date();//u...原创 2020-04-20 22:07:00 · 391 阅读 · 0 评论 -
双亲委派机制
类加载器双亲委派模型图双亲委派模型构成启动类加载器,扩展类加载器,应用程序类加载器,自定义类加载器双亲委派模型工作过程是如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。为什么需要双亲委...原创 2020-05-05 09:55:23 · 142 阅读 · 0 评论 -
JVM的内存结构
Java虚拟机运行时数据区图程序计数器程序计数器,可以看作当前线程所执行的字节码的行号指示器它是线程私有的。Java虚拟机栈线程私有的,生命周期与线程相同。每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(包括参数)、操作数栈、动态链接、方法出口等信息。局部变量表存放各种基本数据类型boolean、byte、char、short等本地方法栈与虚拟机栈基本类...原创 2020-05-05 09:58:33 · 108 阅读 · 0 评论 -
对象的内存布局
堆的默认分配图Java堆 = 老年代 + 新生代。新生代 = Eden + S0 + S1。新生代与老年代默认比例的值为 1:2 ,可以通过参数 –XX:NewRatio 配置。默认的,Eden : from : to = 8 : 1 : 1 ,可以通过参数–XX:SurvivorRatio 来设定。方法区结构图方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息...原创 2020-05-05 10:08:25 · 233 阅读 · 0 评论 -
垃圾回收算法
标记-复制算法示意图1969年 Fenichel提出“半区复制”,将内存容量划分对等两块,每次只使用一块。当这一块内存用完,将还存活的对象复制到另外一块,然后把已使用过的内存空间一次清理掉~1989年,Andrew Appel提出“Appel式回收”,把新生代划分为较大的Eden和两块较小的Survivor空间。每次分配内存只使用Eden和其中一块Survivor空间。发生垃圾收集时,将E...原创 2020-05-05 10:11:18 · 161 阅读 · 0 评论 -
java一个类的生命周期
一个类从被加载到虚拟机内存开始,到卸载出内存为止,这个生命周期经历了七个阶段:加载、验证、准备、解析、初始化、使用、卸载。加载阶段:通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口验证:验证的目的是确保Class文件...原创 2020-05-05 10:15:35 · 364 阅读 · 0 评论 -
栈帧概念结构
栈帧是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址信息。局部变量表是一组变量值的存储空间,用于存放方法参数和方法内部定义的局部变量。局部变量表的容量以变量槽(Variable Slot)为最小单位。操作数栈操作数栈,也称操作栈,是一个后入先出栈。当一个方法刚刚开始执行的时候, 该方法的操作数栈也是空的, 在方法...原创 2020-05-05 10:17:40 · 537 阅读 · 0 评论 -
Java内存模型
Java内存模型规定了所有的变量都存储在主内存中每条线程还有自己的工作内存线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。-不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主- 存之间进行数据同步进行...原创 2020-05-05 10:18:43 · 147 阅读 · 0 评论 -
JVM参数思维导图
原创 2020-05-05 10:19:29 · 151 阅读 · 0 评论 -
HDFS之使用Java客户端对文件的一些操作
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.junit.Test;import java.net.URI;/** * @Author SunBingRui * @Date 2020/7/7 16:27 */public class TestHDFS { @Test原创 2020-07-07 18:00:55 · 269 阅读 · 0 评论 -
java之深入理解static关键字
1 class A{ 2 public int i = 10; 3 public void show(){ 4 System.out.printf("%d",i); 5 } 6 } 7 8 class M{ 9 public static void main(String[] args){10 ...原创 2019-09-06 21:08:00 · 141 阅读 · 0 评论 -
java的static关键字有什么作用
求生成对象的个数 1 class A{ 2 private int i; 3 private static int cnt = 0; 4 //此处用static修饰,让cnt属于类,多个对象共用一个属性,减少内存分配 5 6 public A(){ //new对象时,会自动执行无参构造方法 7 c...原创 2019-09-07 15:05:00 · 93 阅读 · 0 评论 -
java抽象类
1 abstract class A{ //类前面也必须加abstract2 //抽象类里面不一定非要有抽象方法,有抽象方法的类一定是抽象类3 abstract public void f();4 //没有方法体的方法叫抽象方法,抽象方法要求末尾必须得加分号,前面必须得加abstract5 } 1 abstract class A{ ...原创 2019-09-09 18:01:00 · 117 阅读 · 0 评论 -
java中的final关键字的作用
final修饰类:表示该类不能被继承final修饰属性:表示该属性必须被赋值一次final修饰方法:表示该方法可以被子类继承,但是不能被子类重写 1 class A{ 2 final public int i;//报错 3 //被final修饰的变量叫做常变量(固定不变),必须被赋值且只能赋值一次,哪怕第二次赋值跟第一个赋值一样也不行 4 //不能放在...原创 2019-09-09 18:49:00 · 214 阅读 · 0 评论 -
java接口、接口与抽象类的区别
类不可以继承(extends)接口,只能实现(implements)接口(一个或多个)但是接口可以继承(extends)接口(一个或多个) 1 interface It{ 2 public abstract void f();//public abstract 可省略,系统默认加上 3 } 4 5 class A implements It{ 6...原创 2019-09-09 20:59:00 · 181 阅读 · 0 评论 -
java编译运行含有包层的类
1 package zh.li;//必须是第一条语句 2 //编译生成的字节码.class文件都在zh目录下的li目录里 3 4 class A{ 5 public void f(){ 6 System.out.printf("AAA"); 7 } 8 } 9 10 class M...原创 2019-09-10 21:09:00 · 122 阅读 · 0 评论 -
Java中同包和不同包类进行相互访问的问题
在子类内部,可以访问从另一个包继承过来的父类的Public和protected成员在子类外部,只能通过子类对象名访问public成员...原创 2019-09-10 22:51:00 · 2488 阅读 · 0 评论 -
JAVA父类的静态方法能否被子类重写?
静态: 在编译时所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间,在实例化之前这个方法就已经存在于内存,跟类的对象没什么关系。子类中如果定义了跟父类相同名称、相同的形参列表、相同返回值类型的静态方法,就满足重写的条件,于是在内存中又分配了一块给子类的静态方法,重写了父类方法。父类代码1 public class Fu {2 public st...原创 2019-09-18 20:03:00 · 655 阅读 · 0 评论 -
Java异常之异常分类、常见异常、异常处理
什么是异常:异常(Exception)是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程。注意:如果实际抛出的异常对象属于Exception的子类对象,而继承自Throwable类的异常对象和Exception类同级别,则不能被Exception捕获到!根据多态,父类的引用可以接收子类的对象!常见异常...原创 2019-09-27 17:31:00 · 192 阅读 · 0 评论 -
JavaIO流之四大基本抽象流、流的分类标准、字节流与字符流的区别是什么?
什么叫流 流就是程序和设备之间嫁接起来的一根用于数据传输的管道,这个管道上有很多按钮,不同的按钮可以实现不同的功能! 这根带有按钮的用于数据传输的管道就是流!四大基本抽象流字节输入流:InputStream字节输出流:OutputStream字符输入流:Reader字符输出流:Writer注:抽象流实质上就是抽象类,实际上使用到的是继承...原创 2019-10-02 16:18:00 · 400 阅读 · 0 评论 -
Java如何使用字符流进行文件读写、拷贝的操作
字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt");调用方法读取数据: int data = reader.read(); // 读取一个字符,返回该字符代表的整数,若到达流的末尾,返回-1字符流读数据 – 按字符数组读取创建字符流读文件对象:...原创 2019-10-03 14:36:00 · 646 阅读 · 0 评论 -
java的this关键字
class point{ int x; int y; point(int x,int y){ this.x=x;//如果形参和属性名相同,为了区分开来,必须要在属性名前加this y=y;//若不加this,则其值还是默认定义的0 }}public class This { public static void main(St...原创 2019-10-05 09:40:00 · 151 阅读 · 0 评论 -
Scanner类的next()方法和nextLine()方法的异同点
通过一段代码就可以明白其中的奥妙!! 1 import java.util.Scanner; 2 3 public class next_nextLine { 4 public static void main(String[] args) { 5 Scanner s = new Scanner(System.in); 6 7 ...原创 2019-10-05 09:41:00 · 137 阅读 · 0 评论 -
java的StringToKenizer类和Scanner类的区别
相同点: StringToKenizer类和Scanner类都可用于分解字符序列中的单词!不同点: StringToKenizer类把分解出的全部字符串都存放到StringToKenizer对象的实体中,因此StringToKenizer对象能较快的读取字符串,但是会占用较多的内存(用空间换取速度)! Scanner类则不把字符串放到Scanner对象的实体中,而是...原创 2019-10-06 19:35:00 · 542 阅读 · 0 评论 -
Map映射如何使用迭代器?
迭代器只针对集合类型的数据,因此map类型的必须先转换成集合类型才能使用迭代器去获取元素。 1.在map中虽然不能直接实例化迭代器,但map集合提供了keySet()方法和value()方法,可以通过先将键值输出到一个集合,可以是list集合或者set集合。 2.通过键的集合就可以直接实例化迭代器。 3.在进行迭代操...原创 2019-11-20 22:12:00 · 648 阅读 · 0 评论 -
TreeMap树映射取出对象的方式
1.直接获取该TreeMap集合中的关系:entrySet() Map接口中的方法,返回值类型是该集合中的各个关系;返回值类型是:Set类型的Map.EntrySet类型;然后在通过Set集合中特有的元素取出方式:将集合中的各个元素迭代取出;例子: 1 import java.util.*; 2 class MapDemo{ 3 pulbic static void main...原创 2019-11-21 22:20:00 · 455 阅读 · 0 评论 -
Java面试题之“==”和“equals()”方法的区别?
一、“== ”:运算符1.可以使用在基本数据类型变量和引用数据类型变量中。2.如果比较的是基本数据类型变量:比较的是两个变量保存的数据是否相等。(不一定类型要相同)3.如果比较的是引用数据类型变量:比较的是两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。二、equals()方法的使用:1. 是一个方法,而非运算符。2. 只能适用于引用数据类型。3.Objec...原创 2020-02-22 17:24:00 · 340 阅读 · 0 评论 -
Java的编译过程、命名规则、八大基本数据类型以及数据类型之间的转换
1. Java严格区分大小写2. 一个源文件public主类名必须和文件名完全一致3. 命名规则严格要求,字母、数字、下划线、美元符号$、下划线_组成,其中不能以数字开头,也不能使用Java的关键字Java执行过程:1. 编写源码2. 编译源码(xxx.java->xxx.class,这个过程中,生成字节码文件) javac.exe 编译器...原创 2019-09-04 10:31:00 · 189 阅读 · 0 评论 -
java运行时打印输出的方式有哪些?
JDK1.5后,可以使用类似C语言的输出控制格式在Java中,double和float都用%f输出int , long int, short, byte都用%d输出int , long int也可用%x, %#x , %X , %#X,转换为16进制输出一个整型常量默认是int类型,如果数字过大,则必须在末尾加L,否则会报错比如:1 long i = 6...原创 2019-09-04 10:33:00 · 601 阅读 · 0 评论 -
面向过程和面向对象的思想进行对比
面向过程设计思想:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现以算法为核心自上向下设计,要求一开始必须对问题有很深的了解将大问题转化为若干小问题来求解表现形式:用函数来作为划分程序的基本单位直接面向问题面向过程设计的优点:易于掌握和理解,符合人们的思维习惯对于需求明确、规模不大、变动较小、的问题非常适合面...原创 2019-09-04 10:59:00 · 190 阅读 · 0 评论 -
java是如何进行内存分配的
1 class A{ 2 int i; 3 int j; 4 } 5 6 clsaa demo{ 7 public static void main(String[] args){ 8 A aa = new A(); 9 10 A aa; //用数据类型+变量名,a...原创 2019-09-04 16:45:00 · 95 阅读 · 0 评论 -
Java中的访问控制符有哪些
类的访问控制符有四种:l publicl protectl default默认(即不加任何修饰符)l private在一个类的内部,所有的成员可以相互访问,访问控制符是透明的,访问控制符是针对类的外部而言的。外部访问包括两种方式:l 通过类名访问类内部的成员l 通过类对象名访问类内部成员public可以通过外部访问方式...原创 2019-09-04 16:47:00 · 633 阅读 · 0 评论 -
java中构造方法与方法的重载分别是什么?
构造方法构造方法的名字跟类名一样没有返回值,也不能写void若没有写构造方法,则默认生成一个无参构造方法若自己写了一个有参或无参构造方法,则不会默认生成无参构造方法 1 class A{ 2 public int i; //此处的i没有在方法体内,属于成员变量(属性), 3 //可以不用初始化,数...原创 2019-09-04 21:26:00 · 155 阅读 · 0 评论 -
java中的this关键字如何理解?
1 class A{ 2 int i; 3 4 public A(int i){ 5 this.i = i;//代表当前已经创建的对象 6 } 7 8 public void show(A * this){//this代表当前正在调用show方法的对象 9 ...原创 2019-09-04 22:11:00 · 107 阅读 · 0 评论 -
java集合有哪些分类以及集合下的ArrayList和LinkList的优缺点
文章目录集合Collection-存放单值类型数据List-有序、可重复ArrayListLinkedListVectorSet-无序、不可重复HashSetSortedSetTreeSetMap-存放的是键值对类型HashMapTreeMapSortedMap集合Collection-存放单值类型数据List-有序、可重复注意:有序指的是集合中的元素有下标,放进去和取出来的顺序一致ArrayList底层是数组优点:查询效率高,因为数组中的元素在内存中是连续的,可以快速的根据下标获取集合中的原创 2021-01-12 11:38:14 · 167 阅读 · 0 评论 -
java的缓冲流用于提升文件的读写效率
缓冲流概述缓冲流就是带有缓冲区的输入输出流缓冲流可以显著减少我们对IO访问的次数,保护硬盘!缓冲流本身就是处理流(包裹流),所以缓冲流必须依附于节点流(原始流)处理流是包裹在原始节点上的流,相当于包裹在管道上的管道创建字符流读文件对象: BufferedReader br = new BufferedReader(new FileReader("...原创 2019-10-05 09:41:00 · 1332 阅读 · 0 评论 -
Java面试题
Java部分1、基础篇①怎么理解面对对象?②重载和重写区别?③什么是字节码?采用字节码文件最大的好处?④列举基本数据类型?分别所占字节?⑤StringBuffer、StringBuild区别?⑥异常怎么处理?2、集合篇①都有哪些集合?②Hashmap是线程安全的吗?为什么?③Hashmap装载因子?3、并发篇①程序、进程、线程概念?②线程的生命周期?③创建线程的方式?④为什么要使用线程池?举例几种常见的线程池以及适用场景?4、网络篇①TCP三次握手和四次挥手?②TCP和原创 2020-07-08 12:00:26 · 154 阅读 · 0 评论