Java
文章平均质量分 59
卿本佳人-
性别男~,爱好女~。
展开
-
JVM--类加载
文章目录类加载类的生命周期加载连接初始化使用反射调用卸载类加载器分类java.lang.ClassLoader类类加载器的代理模式类加载类的生命周期加载通过一个类的权限定名来获取定义此类的二进制字节流:并未指明定义类的二进制字节流的存储形式(class文件、ZIP包)、来源(本地文件系统、内存或网络)以及获取方式(既可以从已有静态资源读取也可动态生成),因而就有了如下的多样可能性:1.>从ZIP包中读取,这是后来支持类加载器可从JAR、EAR、WAR等格式文件中加载class的基础;2.&g原创 2022-03-01 20:36:11 · 319 阅读 · 0 评论 -
JVM内存区域
JVM原创 2022-02-27 21:50:42 · 366 阅读 · 0 评论 -
JVM--垃圾回收
文章目录垃圾回收判断对象已死引用计数算法可达性分析算法(java使用这一种)垃圾收集算法垃圾收集器分代收集(Generational Collection)相关概念内存划分新生代老年代永久代Minor GC和 Full GC的区别Minor GC、Major GC和Full GC垃圾回收Garbage Collection(GC)判断对象已死引用计数算法引用计数算法是在对象中加入一个计数器,当对象被引用,计数器+1,当引用失效,计数器-1这种算法实现简单,效率高,但是有一个严重的问题会导致内原创 2022-02-27 21:49:56 · 574 阅读 · 0 评论 -
java--网络编程
文章目录网络编程网络基础(面试常见)OSI七层网络模型TCP四层网络模型三次握手\四次挥手通讯协议Socket编程网络编程网络基础(面试常见)OSI七层网络模型应用层: OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。(APP中用户看到的数据)表示层: 表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层原创 2022-02-27 20:40:21 · 394 阅读 · 0 评论 -
java--反射
文章目录反射Class类介绍内省动态代理Lombok反射的基本原理反射JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射就是把java类中的各种成分映射成一个个的Java对象,在运行时可以知道任意一个类的属性和方法Class类介绍作用:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成原创 2022-02-22 09:24:04 · 245 阅读 · 0 评论 -
关键字synchronized
关键字synchronized当两个并发线程访问同一个对象object中的synchronized(this)同步代码块时,一段时间内只能有一个线程被执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。注意点同步代码块中出现异常,锁自动释放同步不能继承,所以还得在子类的方法中添加synchronized关键字当一个线程访问object的一个synchronized同步代码块时,另一个线程仍然可以访问该object对象中的非synchronized(this)同步代码块。syn原创 2022-02-20 19:38:20 · 71 阅读 · 0 评论 -
java--守护线程
守护线程gc线程 (线程不定时回收垃圾)属于守护线程当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程和主线程一起销毁setDaemon(true)必须在调用线程的start()方法之前设置,否则会抛出IllegalThreadStateException异常。在守护线程中产生的新线程也是守护线程。什么情况下会需要守护线程呢? 一般情况下是,当我们希望创建一个线程来执行一些辅助的工作,但是又不希望这个线程阻碍 JVM 的关闭,在这种情况下,我们就需要使用守护线程了。原创 2022-02-20 19:23:37 · 3949 阅读 · 0 评论 -
关键字volatile
文章目录关键字volatile代码关键字volatile被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,从而避免出现数据脏读的现象。一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。禁止进行指令重排序。在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议,每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了原创 2022-02-20 19:19:47 · 144 阅读 · 0 评论 -
java--枚举
文章目录枚举枚举常量每个枚举类型及其定义的枚举变量在JVM中都是唯一的枚举的特点的总结枚举的使用例子枚举通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类。枚举常量public class enu { public static void main(String[] args) { System.out.println(Colour.BLACK); }}enum Colour{ BLAC原创 2022-02-20 19:12:53 · 215 阅读 · 0 评论 -
java---JDBC
文章目录JDBC接口介绍连接步骤JDBC高级封装具体实例JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法接口介绍DirverManager类Connention接口Statement接口ResultSet接口连接步骤导包:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S原创 2022-02-20 17:24:11 · 397 阅读 · 0 评论 -
线程---锁
悲观锁与乐观锁:锁的一种宏观分类方式是悲观锁和乐观锁。悲观锁与乐观锁并不是特指某个锁(Java中没有哪个Lock实现类就叫PessimisticLock或OptimisticLock),而是在并发情况下的两种不同策略。悲观锁:悲观锁(Pessimistic Lock), 就是很悲观,每次去拿数据的时候都认为别人会修改。所以每次在拿数据的时候都会上锁。这样别人想拿数据就被挡住,直到悲观锁被释放。乐观锁:乐观锁(Optimistic Lock), 就是很乐观,每次去拿数据的时候都认为别人不会修改。所以不会原创 2022-02-19 15:10:37 · 70 阅读 · 0 评论 -
并发编程中的三个概念
并发编程中的三个概念原子性: 即一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行可见性: 可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。有序性: 即程序执行的顺序按照代码的先后顺序执行。...原创 2022-02-19 14:16:34 · 134 阅读 · 0 评论 -
线程的实现之线程池
文章目录线程池创建线程池几种不同的线程池代码:ThreadPoolExecutor:线程池优势:降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行方便线程并发数的管控,线程若是无限制的创建,不仅会额外消耗大量系统资源,更是占用过多资源而阻塞系统或oom等状况,从而降低系统的稳定性。线程池能有效管控线程,统一分配、调优,提供资源使用率;更强大的功能,线程池提供了定时、定期以及可控线程数等功能的线程池,使用方便简单原创 2022-02-19 14:14:15 · 317 阅读 · 0 评论 -
单精度与双精度
单精度:都包含三个部分:符号位,指数位和尾数部分。单精度是1位符号,8位指数,23位小数。单精度和双精度精确的范围不一样:单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位;精度主要取决于尾数部分的位数,float为23位,所以float小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。单精度浮点数的数值范围为-3.4乘以10的38次方~3.4乘以10的38次方(-3.4E38~3.4E38)。双精度:双精度是1位符号,11位指数,52位小数。原创 2022-02-10 20:56:54 · 24765 阅读 · 0 评论 -
进程与线程
文章目录进程线程实现线程线程常用的方法线程的生命周期:线程安全进程是系统进行资源分配和调度的基本单位。进程和程序的区别:进程不能脱离计算机存在,处于存活状态的进程会占用某些系统资源,如CPU时间、内存空间、外设访问权等。进程是动态的代码,若不运行程序,操作系统就不会创建相应的进程;此外可以创建同一个程序的多个进程,例如,同时运行多个计算器程序,任务管理器中将出现多个名为“calc.exe”的进程。进程占据的是内存,而程序占据的是外存;进程消亡时就不存在了,而程序仍然存在。线程是CPU调度原创 2022-02-10 20:46:50 · 190 阅读 · 0 评论 -
System和Runtime类
System类java.lang.System类是个很特殊的类,该类不能被实例化,是个非常典型的静态方法类,主要提供与系统相关的静态方法和一些静态对象,如标准输入输出。属性:public static final InputStream in//方法:...原创 2022-02-10 16:34:51 · 80 阅读 · 0 评论 -
日期时间类-Date,Calendar和日期格式化
java.util.Date构造方法:public Date()//public Date(long time)//构造指定时间的Date实例,表示从1970年1月1日0开始经历的毫秒数。成员方法:long geTime()//返回从1970年1月1日0时开始经历的毫秒术数void setTime(long time)//设置时间boolean before(Date when)//判断当前时间是否先于指定时间boolean after(Date when)//判断当前时间是否迟于指定时间原创 2022-02-10 08:55:09 · 1929 阅读 · 0 评论 -
数学运算类(Math、BigDecimal、BigInteger)
java.lang.Math属性:public static final double E;//常数epublic static final double PI;//Π方法:int abs(int i)//绝对值double sin(double a)//求正弦double log(double a)//求自然对数double max(double a,double b)//最大值double pow(double a,double b)//求乘幂double random()//[0,原创 2022-02-09 17:25:14 · 371 阅读 · 0 评论 -
java--I/O流、文件
Flie类构造方法:File f=new File(url);常用方法:public boolean canWrite()/canRead()//获取读/写属性public boolean exists()//判断文件/目录是否存在public long length()//获取文件大小(字节)public boolean delete()//删除文件或目录,若删除目录,要求该目录必须为空public boolean createNewFile()//创建一个空文件,当且仅当该文件不存在原创 2022-01-20 20:19:21 · 46 阅读 · 0 评论 -
java--Object
java.lang.Object类是所有类的直接或间接父类,处在类的最高层次。一个类在声明时若不包含关键字extends,系统就会认为该类直接继承Object类。类中包含了所有Java类的公共属性和方法,这些属性和方法在任何类中均可以直接使用。主要方法如下:(1)public final Class getClass()方法:获取当前对象所属类的信息,返回Class对象。任何对象所属的类都是确定的,故该方法不能被子类重写。通过Class类,程序可以在运行时动态访问类的信息。(2)public int h原创 2022-01-20 20:18:18 · 199 阅读 · 0 评论 -
java泛型
泛型泛型只有在调用时才能确定泛型具体的类型,要在类中使用泛型,一般用K V E T U S表示。泛型用来对集合中的存储内容进行规范,指定泛型后,集合只能存放指定类型的对象。泛型可以继承,不能泛型,如:new E()public class Fanxing<T> { T t; public T test(T t) { System.out.println(t.toString()); return t; }}...原创 2022-01-20 20:09:24 · 169 阅读 · 0 评论 -
java集合类
Collection接口1>int size()//返回集合中的元素个数2>boolean isEmpty()//判断集合是否为空3>boolean contains(Object obj)//判断集合是否包含元素obj4>Iterator iterator()//得到集合的迭代器5>Object[] toArray()//将集合转换为数组,返回的数组包含集合中所有元素6>boolean add(Object obj)//向集合中添加元素,添加成功返回tru.原创 2022-01-20 19:44:36 · 250 阅读 · 0 评论 -
java---异常
异常:检验异常(ChekedException)和非检验异常(UncheckedException)RuntimeException的子类属于非检验异常,对于这类异常,程序可以不处理。Exception子类中RuntimeException以外的类属于检验异常,这类异常程序必须处理。常见异常:1.ArithmeticException:算数异常2.NumberFormatException:数值格式转换异常3.NullPointerException:空指针异常4.ClassCastExce原创 2022-01-20 14:18:36 · 43 阅读 · 0 评论 -
java---缓存
缓存:整形(Byte Short Integer Long)存在缓存范围都为(-128~127);Character的缓存范围为(0~127);public static void main(String[] args) { Integer i1=1; Integer i2=1; Integer i3=128; Integer i4=128; Byte b1=127; Byte b2=127; Character c1='a'; Character c2='a';原创 2022-01-17 21:11:30 · 151 阅读 · 0 评论 -
java---接口
接口:定义:public interface 接口名{ }接口继承:public interface 接口名 extends 父接口列表{ }接口实现:修饰符 class 类名 implements 父接口列表{ }规则:1.接口可以实现多重继承,即一个接口或类可以有多个父接口(用逗号隔开)。一个普通类实现接口,就必须实现接口中所有的抽象方法。2.接口访问控制符只能为public或省略。3.使用implements实现接口,必须重写接口中的抽象方法4.当两个接口的方法重名时若有实体方法,则需原创 2022-01-17 20:54:02 · 139 阅读 · 0 评论 -
java---抽象类
抽象类的定义:abstract class 类名{}专门用来被继承。语法:不可以被直接实例化,可以拥有抽象方法。抽象方法(专门用来被重写): abstract void f();无方法体,方法头以分号结束:abssract 返回类型 方法名(参数);相关规则:1.抽象类可有构造函数,但不能直接创造抽象类的对象。2.抽象方法必须放在抽象类(或接口中),抽象类中可以包含普通方法。3.抽象类的普通子类必须实现抽象类中所有的抽象方法。)4.抽象类不能被final修饰。public class T原创 2022-01-17 20:17:41 · 135 阅读 · 0 评论 -
java---基本数据类型
数据类型:基本数据类型和引用数据类型基本数据类型:保存在栈内存中的简单数据段.即这种值完全保存在内存中的一个位置。引用数据类型:保存在栈内存中的引用名指向保存在堆内存中的对象,类似一个指针, java中除了基本类型其他都是引用类型。引用类型,默认值是null(空值)八种基本数据类型:整数型:1byte = 8Bitbyte b1=10;//1个字节(二进制8位)(-128~127)short //短整型,2个字节int //整形,4个字节long L1 = 10L;//长整型,8个字.原创 2022-01-17 14:48:30 · 129 阅读 · 0 评论 -
java排序算法
main函数:public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入排序数字的个数:"); int n=sc.nextInt(); System.out.println("请输入"+n+"个数:"); int[] In=new int[n]; for (int i=0;i<n;i++) { In[i]=sc.nextInt();原创 2022-01-15 15:29:23 · 116 阅读 · 0 评论 -
java--方法
变量:成员变量(全局变量,属性)与局部变量:局部与全局变量https://blog.csdn.net/xue208212674/article/details/84971570?spm=1001.2014.3001.5501方法的参数传递方式:基本数据类型:参数传递是值的传递。引用数据类型:参数传递是引用传递,传地址。public class fangfa { static Map map = new HashMap(); static String str= new String("123原创 2022-01-13 20:42:40 · 1036 阅读 · 0 评论 -
java--继承与多态
继承class B extends A 其中B为子类,A为父类。1.一个类只能有一个父类,可以多重继承(爷孙)。2.子类继承父类的非private成员变量及成员方法,也可以增加自己的成员变量和方法。3.用子类发构造方法构造对象时,默认先调用父类的无参构造方法。4.子类重定义父类成员:定义同名的变量会隐藏父类变量,定义同名方法会覆盖父类方法。5.若B是A的子类,则:A a=new B();是可以的。此时new B会“塑性”为A,丢掉自己的个性。B b=new A()和B b=(B)newA()原创 2022-01-13 19:46:16 · 157 阅读 · 0 评论 -
java--访问控制符、非访问控制符
访问控制符:有四种级别从大到小依次为:public //公共的protected //受保护的(家族性的)default //默认的(本包下)private //私有的同一个类同一个包不同包子类不同包非子类private1---default11--protected111-public1111...原创 2022-01-13 19:12:12 · 240 阅读 · 0 评论 -
java---数组
数组数组 java中的数组的类型和长度不可变。数组的初始化:int[] arr;arr = new int[] {1,2,3,4,5};//直接赋值int[] arr1={1,2,3};引用类型的默认值都是null;数组扩容: 调用System下的arraycopy函数arraycopy(Object src,int srcPos,Object dest,int destPos,int length);src:原数组srcPos:从原数组中的那个位置开始dest:新的扩容的数组原创 2022-01-12 20:51:38 · 146 阅读 · 0 评论 -
java-----字符串
字符串:创建字符串:String s = "abc";String s = new String("abc");字符串的输入:Scanner sc = new Scanner(System.in);String s = sc.next();//读入一个字符串String s = sc.nextInt();//读入一行求字符串长度的方法:length()比较两个字符是否相等的方法:equals(),它是区分大小写的。求子串的方法:substring(begin,end),范围为begi原创 2022-01-12 20:30:39 · 62 阅读 · 0 评论 -
& | && || >>运算符
char类型可以在数学运算中隐式转换为整数;基本数据类型,数值相等时,就相等。char ch = 'a';int i = 12;double ii = 12.0;System.out.println(i==ii);//truei=i+ch;System.out.println(i);//109按位运算(二进制):与运算(&)前后两个数字转化为二进制,右侧对齐,上下比较,两者都为1则结果为1,有一个不为1则结果为0;int a = 7 & 8; //7: 111//原创 2022-01-11 19:44:35 · 123 阅读 · 0 评论 -
运算符优先级与短路
自增:++a,先加加,后赋值;a++,先赋值,后加加;自减--a,先减减,后赋值;a--,先赋值,后减减;短路现象:1.A && B ,若A的值为false,则整个表达式的结果为false,B被短路不运算。bool = false && true;//false2.A || B,若A的值为true,则整个表达式的结果为true,B被短路不运算。bool = true || false;//true...原创 2022-01-10 19:09:47 · 373 阅读 · 0 评论 -
day02
堆中保存的是:new User();,即对象本身。栈中保存的是:user = 对象的引用,即对象名和对象的内存地址对象、数组、集合、String都是引用数据类型。所用引用类型的默认值都是null。引用就是指向对象在堆heap中的地址,引用类型有两块存储空间(一块在栈stack中,一块在堆heap中);对于引用类型的对象,对象名和对象的引用放在栈stack中,对象放在堆中;public static void test(){ String a = "a";//a指向堆中a的地址 String b原创 2022-01-07 20:16:37 · 158 阅读 · 0 评论 -
day01
类:一个模板,是对事物特征(变量)和行为(方法)的描述。对象:是类的一个实体,类只是一种对事物的构建描述,对象则是根据类的表述创建的个体。变量:是类对象的特征。变量的使用:1.先声明,再赋值,在使用2.使用变量名来访问这块区域的数据3.变量的作用域:其定义所在的一对{}内4.只有在作用域内才有效5.同一作用域,不能定义重名变量java定义变量的格式:数据类型 变量名 = 变量值;方法:是类对象的行为。//void 返回值的类型//speak 方法名//()参数列表.原创 2022-01-07 20:16:09 · 168 阅读 · 0 评论