Java
文章平均质量分 84
MardenSSS
这个作者很懒,什么都没留下…
展开
-
equal和hashcode函数
问题:为什么根据自己的需求,重写equal函数的时候,必须重写hashcode函数?回答:为了保证相等对象必须具有相同的哈希码(哈希值是用来辅助判断对象是否相等,例如要将对象存储在HashSet中,首先要判断对象是否重复,即根据哈希值进行判断,如果哈希值不同,则说明对象不同,直接插入即可,若哈希值相同,再判断对象具体的属性是否相同,若不相同,则判断发生哈希冲突,通过哈希冲突处理再插入)示例:某个学生类,包括学生姓名,学号,性别,家庭住址等信息,在判断学生是否相等时,我们设定如果学生的..原创 2020-09-14 10:43:21 · 197 阅读 · 0 评论 -
Java中锁机制
一、CAS操作(无锁,自旋锁的本质)CAS(Compare and Swap):比较和交换,又叫自旋(自选就是空转等待,一直等到她接纳你为止),自旋锁,无锁(无重量锁),是一种实现并发算法常用到的技术。即:CAS需要有3个操作数,内存地址V,旧的预期值A,即将要更新的目标值B。CAS在指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做,整个比较并替换的操作是一个原子操作。ABA问题:通俗理解:一个线程把数据A变为了B,然后又重新变成了A。此时另原创 2020-09-02 18:38:50 · 181 阅读 · 0 评论 -
Java中静态代码块,非静态代码块,构造函数的执行顺序
静态代码块:是用来初始化类的信息,在类被加载的时候就会被执行,且只执行一次。执行优先级高于非静态的初始化块。非静态代码块:是用来初始化类的实例信息,在创建对象的时候就会被执行,且每创建一个对象都会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。构造方法:是用来创建对象的。执行顺序:静态代码块>非静态代码块>构造方法即:程序在执行时,首先执行静态代码块,且只执行一次。接下来再创建对原创 2020-09-01 09:25:32 · 2473 阅读 · 2 评论 -
volatile关键字详解
概述:Java提供了volatile关键字来保证可见性、有序性。但不保证原子性volatile关键字的两个作用:(1)保证可见性。当一个共享变量被volatile关键字修饰时,它会保证修改的值会立即更新到主存,当有其他线程需要读取时,它会去内存中读取新值。(2)防止指令重排序。作用一:保证可见性背景:为了提高处理速度,cpu不直接和内存进行通信,而是先将系统内存的数据读到内部缓存后再进行操作,但操作完不知道何时会写入到主存。如果对声明了volatile的变...原创 2020-08-26 10:56:19 · 183 阅读 · 0 评论 -
Java动态性之反射机制
一、动态语言程序运行时,可以改变程序结构或变量类型,典型的语言:python,ruby,javascript等function test(){ var s="var a=3; var b=5; alert(a+b);"; eval(s);}c,c++,java不是动态语言,java可以称之为“准动态语言”。但是java有一定的动态性,我们可以利用反射机制,字节码操作获得类似动态语言的特性。二、反射机制反射机制(reflection)指的是可以在运行时加载,探知,使用.原创 2020-07-26 16:49:59 · 271 阅读 · 0 评论 -
Java多线程
aaa原创 2020-07-22 20:02:20 · 287 阅读 · 0 评论 -
IO流详解
File类File类是文件或目录路径名的抽象表示。Java中路径名的书写:(1)使用“/”(使用左斜杠)--------推荐使用!!!Java要实现跨平台,而Linux中的路径使用“/”,Windows中的路径一般使用“\”,也能识别“/”,故统一使用“/”。String path="D:/java300/IO_study/IO.png";(2)使用常量拼接常量...原创 2019-12-10 22:44:38 · 1054 阅读 · 0 评论 -
网络编程详解
网络编程中有两个主要的问题:(1)如何准确的定位网络上一台或多台主机(IP和端口号)(2)找到主机后如何可靠高效地进行数据传输(网络通信协议)传输层协议(1)TCP协议(传输控制协议,Transmission Control Protocol)使用TCP协议前,须先建立TCP连接,形成数据通道 传输前,采用“三次握手”方式,是可靠的 TCP协议进行通信的两个应用进程:...原创 2019-12-10 18:22:48 · 2833 阅读 · 0 评论 -
Java爬虫详解
网络编程常用API(1)IP地址:用来标识网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。比如互联网的每个服务器都要有自己的IP地址,而每个局域网的计算机要通信业要配置IP地址。路由器是连接两个或多个网络设备。InetAddress:封装计算机的ip地址,没有端口两个静态方法:(1)getLocalHost:本机(2)getByName():根据域名或者ip地址...原创 2019-12-09 22:15:48 · 706 阅读 · 0 评论 -
手写HashMap底层(源码)
底层结构:在手写HashMap的时候,需要首先弄清楚HashMap底层结构实现原理。HashMap底层采用哈希表实现,其中哈希表相当于“数组+链表”的结构。其结构示意图如下:采用哈希表实现HashMap的时候,需要首先弄清楚其存储流程。首先创建Entry节点的结构,并且创建指定长度的数组;其次根据哈希函数计算的哈希值确定节点在数组中的存储位置,最后判断数组指定位置是否已有其他节点,并在...原创 2019-12-09 16:08:09 · 267 阅读 · 0 评论 -
Java中Robot类详解
概述Java中Robot类位于java.awt.Robot,该类用于为测试自动化,自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件,Robot类的主要目的是便于Java平台实现自动测试。Robot可以模拟鼠标和键盘的输入,相当于Java版的按键精灵。常用方法1.创建实例Robot robot = new Robot();2.延时函数ro...原创 2019-11-08 16:39:32 · 14631 阅读 · 4 评论 -
正则表达式
正则表达式概述为什么需要正则表达式(Regular Expression)?--文本的复杂处理正则表达式的优势和用途:--一种强大而灵活的文本处理工具;大部分编程语言,数据库,文本编辑器,开发环境都支持正则表达式正则表达式的定义:--正如其名字一样描述了一个规则,通过这个规则可以匹配一类字符串,学习正则表达式很大程度上就是学习正则表达式的语法规则。开发中使用正则表达式的...原创 2019-10-23 09:13:07 · 408 阅读 · 0 评论 -
JAVA中注解
注解入门注解(Annotation)的发展:注解是从JDK5.0开始引入的新技术注解(Annotation)的作用:不属于程序本身,可以对程序作出解释(这一点跟注释没什么区别) 可以被其他程序(如编译器)读取注解(Annotation)的格式:注解以“@注解名”在代码中存在,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")...原创 2019-10-22 10:55:35 · 295 阅读 · 0 评论 -
Java设计模式
单例模式保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。单例模式只生成一个实例,减少了系统性能开销,当一个对象需要比较多的资源时,如读取配置,产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。饿汉式(直接加载)public class SimpletonDemo{ private SimpletonDemo(){ ...原创 2019-08-29 10:15:20 · 84 阅读 · 0 评论 -
Java中容器
Java容器概述Java容器包括两个部分:Collection和Map。Collection:表示单个元素对象的集合,主要包括Set和List两个接口,Set表示无序,不可重复的集合,List表示有序,可重复的集合。Collection接口包含Set和List两个子接口,具体实现类有HashSet,ArrayList和LinkedList。Map:表示键值对对象的集合。Map接口具体实...原创 2019-08-28 19:51:16 · 177 阅读 · 0 评论 -
JDBC与7步骤数据库连接操作
JDBC概述现实生活中,许多数据库厂商开发了各自不同的数据库,java程序员想要连接并使用不同的数据库,就需要不同的操作。为了做到方便统一,SUN公司提供了一套API,即为java开发者和数据库厂商提供了统一的编程接口。不同的数据库厂商根据统一的接口,编写各自的数据库实现类;java开发者也可以通过统一的编程接口操作不同的数据库。这套API就是JDBC(java数据库连接),充当jav...原创 2019-08-27 20:16:25 · 582 阅读 · 0 评论 -
Java中String类,StringBuffer类和StringBuilder类
底层分析:(1)String类String类对象代表不可变的字符序列。其底层结构如下:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[]; ...原创 2019-07-14 17:30:59 · 146 阅读 · 0 评论 -
Java中字符串常量池和字符串拼接(未完待续)
String对象的创建方式Java中String对象的创建方式有两种:(1)采用字面值的方式创建一个字符串对象String s1 = "abc";String s2 = "abc";System.out.println(s1==s2);上述代码返回的结果是true,"=="比较引用数据类型时,是比较两个引用数据类型对象的内存地址是否相同,显然,在这里s1和s2的内存地址相同。...原创 2019-07-14 18:17:18 · 960 阅读 · 0 评论 -
Java中包装类
为什么设计包装类?Java是一门面向对象的语言,但是Java中的基本数据类型(byte,short,int,long,char,boolean,float,double)并不具备对象的性质,即没有成员变量和成员方法可以调用,但是在实际中,我们经常需要将基本数据类型转化成对象,以便于操作。为了弥补这个缺陷,Java提供了包装类。什么是包装类?包装类的本质就是将基本数据类型以及一些辅助方法...原创 2019-07-15 10:50:59 · 126 阅读 · 0 评论 -
Java中异常处理机制
解析:Java异常机制定义了Throwable类,其中Exception类和Error类均是其子类。(1)Error类表示Java运行时环境出现的错误,是程序无法处理的错误,表示运行应用程序中较严重的问题,大多数与代码编写者的操作无关,而表示代码运行时JVM出现的问题,例如:OutOfMemoryError表示虚拟机无法为对象分配足够的空间;StackOverflowError表示虚拟...原创 2019-07-15 17:51:12 · 280 阅读 · 0 评论 -
Java中==和equals()的区别
==:在Java中,"=="表示比较双方是否相同。如果是基本数据类型(byte,short,int,long,float,double,boolean,char),则表示值相等。如果是引用数据类型(类,接口,数组等),则表示内存地址相等,即同一个对象。例如:int a=19;int b=33;System.out.println(a==b);上述代码比较两个基本数据类型a和b...原创 2019-07-11 16:48:36 · 163 阅读 · 0 评论 -
Java中this关键字
含义:this关键字指代当前对象,本质就是“创建好的对象的地址”。当一个对象创建后,Java虚拟机就会给对象分配一个内存空间和一个引用自身的指针,这个指针的名字就是this。用法:(1)访问类中的成员变量,用来区分成员变量和局部变量。public class Student { private String name; private int age; private ...原创 2019-07-11 17:34:56 · 134 阅读 · 0 评论 -
Java中static关键字
含义:程序执行时,JVM加载.class文件到方法区中,其中包括静态变量,静态方法和字符串常量。static表示“静态”,用来修饰成员变量和成员方法,也可以形态静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象,也即它不依赖于特定的实例,被类的所有实例所共享,只要类被加载,JVM就能根据类名在运行时方法区中找到他们。用法:(1)静态变量静态变量(static变量...原创 2019-07-11 21:08:22 · 125 阅读 · 0 评论 -
Java中super关键字
含义:super可以理解为指向自己父类对象的一个指针,而这个父类指的是离自己最近的一个父类。用法:(1)直接访问父类中的属性或方法。(2)若父类和子类中有同名的属性或者方法,需要通过super进行区分。public class Test { public static void main(String [] args){ new Child().f(); }}...原创 2019-07-11 21:57:59 · 153 阅读 · 0 评论 -
Java中访问控制符
说明:Java中提供了四种访问控制符,分别是private,default,protected和public,其访问控制级别从小到大如图所示:(1)private:(当前类访问权限)用private修饰的变量或方法只能被该类自身所访问和修改,而且不能被其他任何类(包括该类的子类)来获取和引用。很显然,private用来修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该...原创 2019-07-12 10:42:37 · 563 阅读 · 0 评论 -
字符集解析
一、字节与字符字节:这个是最基本的概念了,字节是计算存储容量的一种计量单位。我们知道计算机只能识别1和0组成的二进制位。一个数就是1位(bit),为了方便计算,我们规定8位就是一个字节。例如 :00001111这个8位二进制数就占了一个字节的存储容量。字符:字符和字节不太一样,任何一个文字或符号都是一个字符,但所占字节不一定,不同的编码导致一个字符所占的内存不同。例如:标...原创 2019-07-18 22:05:01 · 183 阅读 · 0 评论 -
Java中重载(overload)与重写(override)
重载(overload):在一个类中,同名的方法如果有不同的参数列表(参数类型不同,参数个数不同,参数顺序不同)则视为重载。同时重载对返回类型没有要求,可以相同也可以不同。重载是一个类中多态性的一种表现,Java中的重载就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数列表(参数类型,参数个数,参数顺序)。调用方法时,通过传递给它们的不同参数列表来决定具体使用哪个方法。...原创 2019-07-12 14:54:40 · 231 阅读 · 0 评论 -
Java中向上造型和向下造型
向上造型:向上造型也叫做向上类型转换或自动类型转换,即父类的引用指向子类的对象。将子类对象的类型转换成父类的类型。Animal a = new Dog();上述代码中,创建一个Dog类型的对象,并将其向上造型为Animal类型。向下造型:向下造型也叫做向下类型转换或强制类型转换,即子类的引用指向父类的对象。将父类对象的类型转换成子类的类型。Animal a = new ...原创 2019-07-12 15:24:51 · 4436 阅读 · 4 评论 -
Java中final关键字
含义:final意为“最终的”,“不可改变的”。final关键字可以用来修饰类,变量和方法。用法:(1)final修饰类当final修饰一个类时,表示这个类时是最终的,即不可被继承。如String类被final修饰,故String类不可以被继承。public final class String(2)final修饰变量当final修饰变量时,如果是基本数据类型的变量,...原创 2019-07-12 15:42:50 · 101 阅读 · 0 评论 -
Java中匿名内部类
含义:由于Java中接口和抽象类都不能实例化对象,故使用接口或抽象类时,必须有一个实现类(对应接口)或继承类(对应抽象类)。而该实现类或继承类的对象被使用次数很少,不值得去专门编码时候,就可以使用匿名内部类,此时该类不必命名,并且对象只被创建一次。即匿名内部类的实质是:一个重写或实现了父类或接口的子类对象。格式:new 抽象类/接口(){ 匿名内部类类体部分;}用法:...原创 2019-07-13 18:21:37 · 170 阅读 · 0 评论