Java基础
文章平均质量分 51
zengjyxxz
gitee:https://gitee.com/zengjunyu1991
展开
-
JDK的bin目录下那些常用工具
JDK的bin目录下那些常用工具.原创 2021-02-08 19:00:33 · 165 阅读 · 0 评论 -
Java写框架常用
1原创 2020-11-01 14:03:20 · 142 阅读 · 0 评论 -
volatile关键字解析
volatile关键字解析原创 2020-09-02 18:17:27 · 129 阅读 · 1 评论 -
Synchronized关键字和锁升级
Synchronized关键字和锁升级原创 2020-09-02 18:16:29 · 99 阅读 · 0 评论 -
JVM调优总结
JVM调优总结原创 2020-06-15 15:52:26 · 188 阅读 · 1 评论 -
Java中的悲观锁
1、悲观锁的实现数据库脚本 for updateJava的同步关键字synchronizedReentrantLock可实现公平锁原创 2020-06-06 11:52:58 · 156 阅读 · 0 评论 -
Java中类名.class的基础介绍
获取Class对象的方式主要有三种:第一种:通过Class.forName(“类的全名称”)获取,用这个方法,最常见的应该是应用于JDBC注册驱动的时候用到的。public class Test { try { Class.forName("oracle.jdbc.driver.OracleDriver");// 注册驱动 } catch (ClassNotFoundException e) { // TODO Auto-generated catch blo原创 2020-05-30 20:31:13 · 1365 阅读 · 3 评论 -
Java8的函数式编程
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。在函数式编程思想下,允许把函数本身作为参数传入另一个函数。Java中使用函数式接口来实现“传递行为”的这种思想。方式1:public class TestClassA { @FunctionalInterface public interface SysMsgCallBack{ public void call(); }; public void原创 2020-06-01 09:39:54 · 91 阅读 · 0 评论 -
Java的ThreadLocal
ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。ThreadLocal和Synchronized都是为了解决多线程中相同变量的访问冲突问题,不同的点是Synchronized是通过线程等待,牺牲时间来解决访问冲突。ThreadLocal是通过每个线程单独一份存储空间,牺牲空间来解决冲突,并且相比于Synchronized,ThreadLocal具有线程隔离的效果,只有在线程内才能获取到对应的原创 2020-05-31 20:32:06 · 68 阅读 · 0 评论 -
Java的Collections工具类和Arrays工具类
详见 Collections 工具类和 Arrays 工具类常见方法总结原创 2020-05-31 20:30:44 · 138 阅读 · 0 评论 -
Java的juc并发包集合
从Java 5 开始,在 java.util.concurrent 包下提供了大量支持高效并发访问的集合接口和实现类。这些线程安全的集合类可以分为如下两类。1.以Concurrent 开头的集合类:如ConcurrentHashMap、ConcurrentSkipListMap、 ConcurrentSkipListSet、ConcurrentLinkedQueue 和 ConcurrentLinkedDeque。2.以CopyOnWrite 开头的集合类:如CopyOnWriteArrayList、原创 2020-05-31 20:29:37 · 187 阅读 · 0 评论 -
Java 8系列之Stream的基本语法详解
详见Stream基本语法详解原创 2020-05-31 20:28:46 · 93 阅读 · 0 评论 -
Java多线程的3种实现
实现多线程有三种方法继承Thread类实现Runnable接口实现Callable接口示例:import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * 线程测试 * @author sunlh * */public class ThreadTest { public static原创 2020-05-31 18:33:13 · 136 阅读 · 0 评论 -
Java线程池的4种实现
线程池都继承了ExecutorService的接口,所以他们都具有ExecutorService的生命周期方法:运行,关闭,终止;因为继承了ExecutorService接口,所以它在被创建的时候就是处于运行状态,当线程没有任务执行时,就会进入关闭状态,只有调用了shutdown()的时候才是正式的终止了这个线程池。Java通过Executors工厂类提供我们的线程池一共有4种:ThreadPoolExecutor //指定线程数的线程池。newFixedThreadPool(); //启动固定线程原创 2020-05-31 18:14:13 · 798 阅读 · 0 评论 -
Java集合类结构
集合类结构:Java中的集合包含多种数据结构,如链表、队列、哈希表等。从类的继承结构来说,可以分为两大类,一类是继承自Collection接口,这类集合包含List、Set和Queue等集合类。另一类是继承自Map接口,这主要包含了哈希表相关的集合类。下面我们看一下这两大类的继承结构图:1、List、Set和Queue图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承。(1)List:我们用的比较多List包括ArrayList和LinkedList,这两者的区别也很明原创 2020-05-31 17:40:00 · 272 阅读 · 0 评论 -
Java的String
字符串不属于基本类型,但是可以像基本类型一样,直接通过字面量赋值,当然也可以通过new来生成一个字符串对象。不过通过字面量赋值的方式和new的方式生成字符串有本质的区别:1.通过字面量赋值创建字符串时,会优先在常量池中查找是否已经存在相同的字符串,倘若已经存在,栈中的引用直接指向该字符串;倘若不存在,则在常量池中生成一个字符串,再将栈中的引用指向该字符串。2.而通过new的方式创建字符串时,就直接在堆中生成一个字符串的对象,栈中的引用指向该对象。(备注,JDK 7 以后,HotSpot 已将常量池从永原创 2020-05-31 16:23:32 · 121 阅读 · 1 评论 -
Java中创建对象的5种方法
方式1:使用new关键字创建对象这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们可以调用任意的构造函数(无参的和有参的)去创建对象。比如:Student student = new Student();方式2:使用Class类的newInstance方法(反射机制)我们也可以通过Java的反射机制使用Class类的newInstance方法来创建对象,事实上,这个newInstance方法调用无参的构造器创建对象,比如:Student student2 = (Student)Clas原创 2020-05-31 12:29:15 · 297 阅读 · 0 评论 -
Java的注解和反射
注解按生命周期来划分可分为3类:1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件原创 2020-05-31 12:05:27 · 124 阅读 · 0 评论 -
Java8的Optional类
从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。下面看一个示例:在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException:String isocode = user.getAddress().getCountry().getIsocode(原创 2020-05-31 11:49:34 · 195 阅读 · 1 评论 -
Java中国际化处理
Java中用 ResourceBundle 这个类来解决国际化和本地化问题。这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。使用这个类,properties需要遵循一定的命名规范,一般的命名规范是: 自定义名_语言代码国别代码.properties,如果是默认的,直接写为:自定义名.properties。比如:myres_en_US.pro原创 2020-05-31 11:06:48 · 389 阅读 · 1 评论 -
Java的关键字native
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。JAVA本地方法适用的情况1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问。2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库原创 2020-05-30 23:40:25 · 136 阅读 · 0 评论 -
Java中的异常throw
java为什么有些异常throw出去需要在函数头用throws声明,一些就不用?Excepiton分两类:checked exception、runtime exception;直接继承自Exception就是checked exception,继承自RuntimeException就是runtime的exception。你可以简单地理解checked exception就是要强制你去处理这个异常(不管你throws多少层,你终归要在某个地方catch它);而runtime exception则没有原创 2020-05-30 23:28:05 · 228 阅读 · 0 评论 -
Java中的泛型
什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口原创 2020-05-30 23:04:44 · 112 阅读 · 0 评论 -
Java8的Lambda表达式
Lambda表达式示例:1.不需要参数,返回值为 5。() -> 5 2.接收一个参数(数字类型),返回其2倍的值。x -> 2 * x 3.接受2个参数(数字),并返回他们的差值。(x, y) -> x – y 4.接收2个int型整数,返回他们的和。(int x, int y) -> x + y 5.接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)。(String s) -> System.out.pr原创 2020-05-30 22:36:41 · 84 阅读 · 0 评论 -
Java8的新特性-interface中的static方法和default方法
static方法:java8中为接口新增了一项功能:定义一个或者更多个静态方法。用法和普通的static方法一样。注意,实现接口的类或者子接口不会继承接口中的静态方法代码示例:public interface InterfaceA { /** * 静态方法 */ static void showStatic() { System.out.println("InterfaceA++showStatic"); }}测试:public class原创 2020-05-30 22:05:34 · 549 阅读 · 0 评论 -
Java的关键字instanceof
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class;其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运原创 2020-05-30 20:27:38 · 71 阅读 · 0 评论 -
Java中的static,final,static final
final:final可以修饰:属性,方法,类,局部变量(方法中的变量)final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。final修饰的属性表明是一个常数(创建后不能被修改)。final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继承。我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那么在这个方法的内部,基本类型的值是不能够改原创 2020-05-30 20:23:19 · 121 阅读 · 0 评论 -
Java的枚举
枚举定义及常用内部成员获取:public enum ConstractMongoStatus { NEW(3,"新增"), UPDATE(2,"修改"), DELETE(1,"删除") ; private final Integer status; private final String desc; private ConstractMongoStatus(final Integer status,final String des原创 2020-05-30 19:45:59 · 124 阅读 · 0 评论 -
Java的内部类
嵌套类的分类(1)静态嵌套类(Static nested classes)(2)非静态嵌套类(Non-static nested classes)又称内部类(Inner Class)(3)本地类(Local classes)(4)匿名类(Anonymous classes)静态嵌套类特点:它可以定义静态和非静态的成员;它仅仅可以访问外部类的静态字段和静态方法。如何实例化:Outer.Inner inner = new Outer.Inner();非静态嵌套类特点:除了原创 2020-05-30 18:44:15 · 112 阅读 · 0 评论 -
Java中的代码块
在Java中有,静态代码块、构造代码块、构造函数、普通代码块。执行顺序:静态代码块>构造代码块>构造函数>普通代码块。父类和子类的执行顺序:静态代码块内容先执行,接着执行父类构造代码块和构造方法,然后执行子类构造代码块和构造方法。静态代码块:①、格式在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块:public class CodeBlock {static{System.out.println(“静态代码块”);}}②、执行时机静原创 2020-05-30 13:28:30 · 92 阅读 · 0 评论 -
Java的访问修饰符
类:访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称(访问修饰符与修饰符的位置可以互换)访问修饰符:public:可以被所有的类访问使用,public类必须定义在类名相同的同名文件中。package:可以被同一个包中的类所使用,默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中。修饰符:final:使用此修饰符的类不能够被继承。abstract:类只要有一个abstract方法,类就必须定义为abstract。变量:原创 2020-05-30 12:56:36 · 525 阅读 · 0 评论 -
BigInteger和BigDecimal
Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算。float和Double只能用来做科学计算或者是工程计算,在商业计算中,对数字精度要求较高,必须使用 BigInteger 类和 BigDecimal 类,它支持任何精度的定点数,可以用它来精确计算货币值。其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.BigDecimal 类的实原创 2020-05-30 12:30:31 · 169 阅读 · 0 评论 -
Java数据类型
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。Java 的两大数据类型:内置数据类型引用数据类型内置数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。byte:包装类:java.lang.Bytebyte 数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是 127(2^7-1)原创 2020-05-30 11:45:59 · 104 阅读 · 0 评论