
Java基础
Yisnow.
这个作者很懒,什么都没留下…
展开
-
Java创建Class对象的方式及对比
以下三种获取Class对象的方式有什么不同?1、new Object().getClass2、Object.class3、 Class.forName(“java.util.String”)实例演示场景一为了更好的演示,我们先创建一个对象Person,对象内部定义了一些静态的方法。public class Person { static { System.out.println("Person:静态代码块"); } { System.转载 2020-12-09 21:41:22 · 329 阅读 · 0 评论 -
JDK8的lambda、Stream
https://www.zhihu.com/question/20125256/answer/324121308https://zhuanlan.zhihu.com/p/200709900https://zhuanlan.zhihu.com/p/1965575681、Lambda1.1 简介对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之原创 2020-09-20 16:28:00 · 129 阅读 · 0 评论 -
Java内存泄漏的情况
静态集合类 如HashMap、LinkedList等等。如果这些容器为静态的,那么它们的生命周期与程序一致,则容器中的对象在程序结束之前将不能被释放,从而造成内存泄漏。简单而言,长生命周期的对象持有短生命周期对象的引用,尽管短生命周期的对象不再使用,但是因为长生命周期对象持有它的引用而导致不能被回收各种连接,数据库连接、网络连接、IO连接 在对数据库进行操作的过程中,首先需要建立与数据库的连接,当不再使用时,需要调用close方法来释放与数据库的连接。只有连接被关闭后,垃圾回收器才会回收对应的对象原创 2020-09-06 22:32:03 · 135 阅读 · 0 评论 -
深入理解内部类
# 1、内部类初探内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。(1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。(2)内部类不能用普通的方式访问。(3)内部类声明成静态的,就不能随便的访问外部类的成员变转载 2020-09-06 20:55:15 · 273 阅读 · 0 评论 -
sleep和wait和yield
1、sleep() sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。2、wait() wait()方法需要和notify()及notifyAll()两个方法一起介绍,这三个方法用于协调多个线程对共享数据的存取,所以必须在synchro原创 2020-09-06 18:29:32 · 267 阅读 · 0 评论 -
try catch finally执行顺序
撸代码的时候经常会用到try catch finally,但是如果不理解其中的真正用法 可能程序就会出问题哦,在这里测试几种情况下的返回值Test1: 最简单的在try返回public static final int test1() { int x = 0; try { System.out.println("try"); x = 1; return x; } catch (Exception e) { System.out.println("catch");转载 2020-08-19 11:11:18 · 196 阅读 · 0 评论 -
15.多线程
多线程一个线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程。下图显示了一个线程完整的生命周期。新建状态:使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。就绪状态:当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。运行状态:如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线原创 2020-08-08 19:43:37 · 308 阅读 · 0 评论 -
HashMap排序
说明已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性。请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Integer,User>为形参,返回类型为 HashMap<Integer,User>,要求对 HashMap 中的 User 的 age 倒序进行排序。排序时 key=value 键值对不得拆散。注意:要做出这道题必须对集合的体系结构非常的熟悉。HashMap本身就转载 2020-08-02 18:37:12 · 561 阅读 · 0 评论 -
Java下的数组复制方式
效率:System.arraycopy>clone>Arrays.copyOf>for循环1、System.arraycopyint[] a1={1,2,3,4,5,6};int[] a2={7,8,9,10,11};System.arraycopy(a1,2,a2,3,2);for(int num:a2){ System.out.print(num+" ");}//输出结果:7 8 9 3 4 可以看到这是一个native(本地)方法,也就是说是用C++写的,所原创 2020-08-01 13:46:12 · 95 阅读 · 0 评论 -
Arrays.asList()避坑
简介ArrayList.asList()一般用来将一个数组转换为一个List.public static <T> List<T> asList(T... a) { return new ArrayList<>(a);}根据上述源码可以看出返回一个ArrayList,但是这里的ArrayList并不是实现了Collection接口的那个,这个是Arrays的内部类,底层实现还是数组。当使用Arrays.asList()将数组转换为集合后不能使用修改集合原创 2020-07-30 12:49:37 · 351 阅读 · 0 评论 -
集合类详解
1.List1.1 ArrayListArrayList概述实现List接口的动态数组(大小可变)。默认初始容量10,随着元素增加容量也在不断变化每次添加之前检查是否需要扩容带来数据向新数组的拷贝,若知道数据量可以指定一个初始容量。ArrayList实现不是同步的。如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。ArrayList继承关系ArrayList继承AbstractList抽象父类,实现了List接口(规定了Lis原创 2020-07-24 16:26:03 · 561 阅读 · 0 评论 -
Java基础18.序列化与反序列化
序列化与反序列化基本定义Java序列化就是指把Java对象转换为字节序列的过程;Java反序列化就是指把字节序列恢复为Java对象的过程。核心作用就是对象状态的保存和重建。只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。(不是则会抛出异常)相关接口及类Java为了方便开发人员将Java对象进行序列化及反序列化提供了一套方便的API来支持。其中包括以下接口和类:java.io.Serializablejava.io.Ex原创 2020-07-24 15:38:14 · 194 阅读 · 0 评论 -
Java基础17.继承、封装、多态的实现原理
继承、封装、多态的实现原理JVM 的结构典型的 Java 虚拟机的运行时结构如下图所示图 1.JVM 运行时结构此结构中,我们只探讨和本文密切相关的方法区 (method area)。当程序运行需要某个类的定义时,载入子系统 (class loader subsystem) 装入所需的 class 文件,并在内部建立该类的类型信息,这个类型信息就存贮在方法区。类型信息一般包括该类的方法代码、类变量、成员变量的定义等等。可以说,类型信息就是类的 Java 文件在运行时的内部结构,包含了改类的所有在原创 2020-07-24 15:33:14 · 378 阅读 · 0 评论 -
Java基础16.集合类初探
集合类Collection接口Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。Collection所代表的是一种规则,它所包含的元素都必须遵循一条或者多条规则。如有些允许重复而有些则不能重复、有些必须要按照顺序插入而有些则是散列,有些支持排序但是有些则不支持。在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有原创 2020-07-24 15:15:19 · 144 阅读 · 0 评论 -
Java基础14.IO流
IO流IO流,什么是IO? I : Input O : Output 通过IO可以完成硬盘文件的读和写。IO流的分类?有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input)。或者叫做读(Read)。 从内存中出来,叫做输出(Output)。或者叫做写(Write)。 另一种方式是按照读取数据方式不同进行分类: 有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位。 这种流是万原创 2020-07-24 15:08:21 · 183 阅读 · 0 评论 -
Java基础13.注解
注解元注解元注解就是标记其他注解的注解@Target 用来约束注解可以应用的地方(如方法、类或字段),其中ElementType是枚举类型,其定义如下,也代表可能的取值范围当注解未指定Target值时,则此注解可以用于任何元素之上,多个值使用{}包含并用逗号隔开@Retention用来约束注解的生命周期,分别有三个值,源码级别(source),类文件级别(class)或者运行时级别(runtime)SOURCE:注解将被编译器丢弃(该类型的注解信息只会保留在源码里,源码经过编译后,注解原创 2020-07-24 15:07:08 · 574 阅读 · 0 评论 -
Java基础11.反射
反射类的加载、连接和初始化类的加载当程序主动使用某个类时,如果该类还没有被加载到内存中,则系统会通过加载、连接、初始化这三个步骤对该类进行初始化。有时会把这一整个流程统称为类加载或类初始化。类加载指的是将类的class文件读入内存中,并为之创建一个 java.lang.Class对象,也就是说程序使用任何类的时候,都会为其创建一个class对象。类的连接类被加载之后,系统会为之生成一个Class对象,接着会进入连接阶段,连接阶段负责把类的二进制数据合并到JRE中。类的连接又分为下面三个阶段原创 2020-07-23 22:17:40 · 341 阅读 · 0 评论 -
Java基础10.回调
回调模块间的调用在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种:(1)同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞。(2)异步调用异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式。类原创 2020-07-23 22:17:09 · 115 阅读 · 0 评论 -
Java基础9.Java异常
Java异常Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。总体上我们根据Javac对异常的处理要求,原创 2020-07-23 22:16:20 · 197 阅读 · 0 评论 -
Java基础8.Class类和Object类
Class类和Object类Class类主要跟反射有关。Object类Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法,13个方法之中并不是所有方法都是子类可访问的,一共有9个方法是所有子类都继承了的。1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法原创 2020-07-23 22:15:41 · 230 阅读 · 0 评论 -
Java基础7.浅拷贝与深拷贝
Object类里面有个clone方法:是一种保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。浅拷贝介绍浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复原创 2020-07-23 22:14:13 · 135 阅读 · 1 评论 -
Java基础6.Java自动拆箱装箱
Java自动拆箱装箱当需要一个对象的时候会自动装箱,Integer a=10;当需要一个基本类型时会自动拆箱,int a=new Integer(10);包装类型 == 基本类型时,包装类型自动拆箱;==在没遇到算术运算时,不会自动拆箱;基本类型只会自动装箱为对应的包装类型,代码中最后一条说明的内容。在JDK 1.5中提供了自动装箱与自动拆箱,这其实是Java 编译器的语法糖,编译器通过调用包装类型的valueOf()方法实现自动装箱,调用xxxValue()方法自动拆箱。自动装箱和拆箱会有一原创 2020-07-23 22:13:26 · 139 阅读 · 0 评论 -
Java基础5.抽象类和接口
抽象类和接口含有抽象方法的类一定是抽象类抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。抽象类不能被实例化,也就是不能使用new关键字来得到一个抽象类的实例,抽象方法必须在子类中被实现。在下列情况在中,一个类将成为抽象类。当一个类的一个或多个方法是抽象方法时。当类是一个抽象类的子类,并且不能实现父类的所有抽象方法时。当一个类实现一个接口,并且不能实现接口的所有抽象方法时。为什么使用抽象类而写成抽象类,这样别人原创 2020-07-23 22:12:43 · 162 阅读 · 0 评论 -
Java基础4.final关键字特性
final关键字特性4.1 final变量final变量有成员变量或者是本地变量(方法内的局部变量),在类成员中final经常和static一起使用,作为类常量使用。其中类常量必须在声明时初始化,final成员常量可以在构造函数初始化。final类final类不能被继承,final类中的方法默认也会是final类型的,java中的String类和Integer类都是final类型的。final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。final变量一旦被初始化后不能原创 2020-07-23 22:11:01 · 641 阅读 · 0 评论 -
Java基础3.String和包装类
3.String和包装类在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明,少量的字符串操作(拼接,删除等)。在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String"+"来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等。String类原创 2020-07-23 21:53:46 · 126 阅读 · 0 评论 -
Java基础1、面向对象三大特性
1.Java面向对象三大特性1.1 继承Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承。子类如果对父类的方法不满意可以自己编写继承的方法,即方法重写。重载与重写的区别:继承的初始化顺序:初始化父类再初始化子类;先执行初始化对象中属性,再执行构造方法的初始化实例化一个子类:父类对象属性初始化–>父类对象构造方法–>子类对象属性初始化–>子类对象构造方法final关键字:final 修饰类,则该类不允许被继承。final 修饰方法,则该方法原创 2020-07-23 21:17:12 · 135 阅读 · 0 评论