√ JavaSE
学习ing...
阿财继续努力
学习ing...
展开
-
√ JavaSE - 28.怎么使用lambda表达式(卷1 P242)
只有一个抽象方法的接口称为函数式接口,需要这种接口的对象时,就可以提供一个lambda表达式。lambda表达式实质上是函数式接口的对象。lambda表达式就是一个代码块,以及必须传入代码的变量规范。方法引用的本质是lambda表达式,即利用已经实现的方法替换lambda表达式。import java.util.Comparator;public class LambdaTest { public static void main(String[] args) { /.原创 2021-05-24 20:53:21 · 16994 阅读 · 0 评论 -
√ JavaSE - 27.怎么使用代理(卷1 P273)
利用代理可以在运行时创建实现了一组给定接口的新类,只有在编译时期无法确定需要实现哪个接口时才有必要使用代理。代理模式:使用一个代理对象将原对象包装起来,任何对原对象的调用都要通过代理对象,代理对象决定是否以及何时将方法调用转到原对象上。静态代理:代理类和被代理类在编译期间就确定下来了,不利于程序的扩展,每一个代理类只能为一个接口服务。动态代理:客户通过代理类来调用其他对象的方法,并且是在程序运行时根据需要动态创建被代理类的代理对象。import java.lang.reflect.Invocat.原创 2021-05-24 19:48:10 · 16950 阅读 · 0 评论 -
√ JavaSE - 26.怎么使用反射(卷1 P198)
Class类是一个泛型类,Class类的对象表示一个运行时类型。加载到内存中的类,会缓存一定的时间,在此期间内可以通过不同的方式获取这个类的信息。类的加载过程:加载。将类的class文件读入内存,并由类加载器为之创建一个java.lang.Class对象。链接。将类的二进制数据合并到jre中。初始化。jvm负责类的初始化。利用反射实例化类的对象通常是通过调用类的空参构造器实现的,因此需要保证类具有空参构造器,且是public的。import java.lang.annotation..原创 2021-05-24 11:07:13 · 16970 阅读 · 0 评论 -
√ JavaSE - 25.怎么利用网络传输文件(卷2 P180 P186 P199 P215 P221)
套接字(Socket)由IP地址和端口号组成。IP地址可以自行查询手动输入,也可以利用域名通过InetAddress.getByName()获取。访问量较大的域名通过对应多个IP地址实现负载均衡,访问时InetAddress.getByName()会随机获取其中一个IP地址,InetAddress.getAllByName()会获取所有的IP地址。服务器的输出会成为客户端的输入,客户端的输出会成为服务器的输入。服务器的工作流程:(1) 通过输入流接收客户端输出流发送的请求命令;(2) 解析请求.原创 2021-05-20 14:40:13 · 16965 阅读 · 0 评论 -
√ JavaSE - 24.怎么传输对象(卷2 P70)
利用ObjectOutputStream类进行对象序列化,ObjectInputStream类进行对象反序列化。实现序列化的对象必须实现Serializable接口,提供全局常量serialVersionUID,而且其所有属性也是可序列化的。利用对象序列化可以快速地对一个对象进行深拷贝。import java.io.*;public class SerializableTest { public static void main(String[] args) { //对.原创 2021-05-19 20:14:32 · 16980 阅读 · 0 评论 -
√ JavaSE - 23.怎么操作文件(卷1 P55 卷2 P43 P61 P86)
相对路径是相对于当前Module的路径。Windows系统的路径分隔符为【\\】,Unix系统的路径分隔符为【/】,一般使用File.separator获取当前系统的路径分隔符。一般用字节流处理字节文件,用字符流处理字符文件。一般用缓冲流代替节点流,以提高文件的读写速度。一般先开输入流,再开输出流,先关输出流,再关输入流。为了保证流资源一定被关闭,一般使用try-catch-finally,关闭外层流时内层流自动关闭。一般使用Files类进行读、写、复制、移动、删除文件,以及创建、访问目录。.原创 2021-05-12 17:12:35 · 16899 阅读 · 0 评论 -
√ JavaSE - 22.怎么使用泛型(卷1 P326 P328 P330 P331 P333 P338 P346 P348 P354)
类型变量(T、S、U、……)不能是基本数据类型,只能是引用数据类型,默认为Object类。自定义泛型类或泛型接口时,类型变量在类名或接口名的后面;自定义泛型方法时,类型变量在修饰符的后面,返回值类型的前面。通过关键字extends对类型变量加以约束,类型变量和限定类型可以是类,也可以是接口。最多有一个限定类型是类,可以有多个限定类型是接口;多个类型变量用“,”分隔,多个限定类型用“&”分隔。具有继承关系的类型作为泛型使用时,两个泛型类不再具有继承关系,但可以利用通配符“?”作为其公共父类。.原创 2021-05-12 11:20:28 · 16964 阅读 · 0 评论 -
√ JavaSE - 21.怎么使用Map(卷1 P394 P403 P419)
集合的基本接口之二是Map接口,与Collection接口不同,Map接口存储的是双列数据。Map接口中的key是无序的、不可重复的,使用Set接口存储;value是无序的、可重复的,使用List接口存储;entry(key-value)是无序的、不可重复的,使用Set接口存储。Map的底层实现原理:调用map.put(key,value)时,先调用key.hashCode()计算key的哈希值,根据哈希值计算出该键值对在entry[]中的存放位置,如果此位置上为空,则直接添加,否则比较key与该位置.原创 2021-05-11 15:35:42 · 16914 阅读 · 0 评论 -
√ JavaSE - 20.怎么使用Collection(卷1 P365 P373 P375)
集合的基本接口之一是Collection接口。Collection接口的 contains() 调用对象的equals()进行比较,因此加入集合的对象所在类应重写equals()。Iterator接口是一个迭代器,用于遍历集合中的元素,通过循环调用hasNext()和next()依次访问集合中的元素。每次调用集合对象的iterator()都会得到一个全新的迭代器,指向集合第一个元素的前一个位置。foreach循环可以遍历任何实现了Iterable接口的对象,等价于迭代器。一般情况下,考虑Coll.原创 2021-05-08 09:46:52 · 17052 阅读 · 0 评论 -
√ JavaSE - 19.怎么使用日期和时间(卷2 P280 P284 P288 P289 P290 P294 P298)
Instant类表示时间线上的某个点。LocalDateTime类表示本地的日期和时间。DateTimeFormatter类表示日期和时间的格式器,包括三种格式器:预定义的格式器。locale相关的格式器。带有定制模式的格式器。import java.time.Duration;import java.time.Instant;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;pu.原创 2021-05-07 08:45:17 · 17019 阅读 · 0 评论 -
√ JavaSE - 18.怎么使用String、StringBuffer、StringBuilder(卷1 P44)
String是不可变的Unicode字符序列,底层使用 final char[] 存储;StringBuffer和StringBuilder是可变的Unicode字符序列,底层使用 char[] 存储。String有两种实例化的方式,一种是被字面值直接赋值,另一种是通过关键字new实例化。被字面值直接赋值时,会在常量池中创建String对象,常量池中不会存在内容相同的String对象,若再有被字面值直接复制的String变量,则直接指向常量池中已有的String对象。通过关键字new实例化时,会在堆中创.原创 2021-05-06 15:12:16 · 16912 阅读 · 0 评论 -
√ JavaSE - 17.怎么实现线程间的通信(卷1 P563)
线程进入临界区后,如果发现只有满足了某个条件后才能继续向下执行,则此时可以使用一个条件对象管理这个线程。条件对象负责将不满足条件的线程添加到等待集中,使得该线程进入阻塞状态,直到其他线程利用该条件对象解锁该线程的阻塞状态。Java中的每个对象都有一个内部对象锁,内部对象锁只有一个关联条件。线程间通信的方法:wait() / await():添加线程到等待集中。notifyAll() / signalAll():解锁等待集中所有等待线程的阻塞状态。notify() / signal():解锁等.原创 2021-04-24 21:01:37 · 16986 阅读 · 0 评论 -
√ JavaSE - 16.怎么使用线程同步机制(卷1 P563)
当多个线程操作同一组数据时,可能会出现线程安全问题,通过线程同步机制可以解决线程安全问题。线程同步机制分为关键字synchronized和ReentrantLock类,关键字synchronized又分为synchronized代码块和synchronized方法。线程同步机制的核心是利用 【锁】 控制多个线程对同一组数据的操作,锁可以是任意一个对象,但必须保证多个线程使用的是同一把锁。关键字synchronized自动上锁和解锁,ReentrantLock类手动上锁和解锁。synchronize.原创 2021-04-24 20:11:15 · 16971 阅读 · 0 评论 -
√ JavaSE - 15.怎么使用多线程(卷1 P552 P555 P558 P603)
创建线程的方法:实现Runnable接口、继承Thread类、实现Callable接口、线程池。线程的状态:New(新建)、Runnable(可运行)、Blocked(阻塞)、Waiting(等待)、Timed waiting(计时等待)、Terminated(终止)。线程的优先级分为10级,最高优先级为10级,最低优先级为1级,默认优先级为5级。高优先级线程会抢占低优先级线程的CPU时间,但这并不意味着高优先级线程执行完才执行低优先级线程。线程拥有独立的栈和程序计数器,共享进程的堆和方法区。线.原创 2021-04-23 09:47:07 · 17181 阅读 · 0 评论 -
√ JavaSE - 14.怎么处理异常(卷1 P279 P286 P297)
处理异常的方式有两种,分别是try-catch-finally方式(直接处理异常)和throws方式(间接处理异常)。try-catch-finally方式是利用关键字try检测可能出现异常的语句块,利用关键字catch捕捉出现的异常并进行处理,利用关键字finally执行无论是否捕捉到异常都会执行的语句块。throws方式是利用关键字throws将方法中可能出现的异常抛给调用该方法的上一层方法,让上一层方法利用try-catch-finally方式处理该异常或者继续向上抛。关键字throw用于抛出.原创 2021-04-14 10:30:22 · 17064 阅读 · 0 评论 -
√ JavaSE - 13.怎么使用接口(卷1 P222)
接口的属性都是public static final的,方法要么是public static的、要么是public default的、要么是public abstract的,属性可以省略public static final,方法可以省略public (abstract)。public static final属性、public static方法可以由接口直接调用,public default方法、public abstract方法只能由实现接口的类的对象调用。接口中不能声明构造器,即接口不能被实例化.原创 2021-04-13 20:15:27 · 17003 阅读 · 0 评论 -
√ JavaSE - 12.怎么使用抽象类和抽象方法(卷1 P155)
利用关键字abstract在访问修饰符后面修饰抽象类和抽象方法。包含抽象方法的类一定是抽象类,但抽象类可以不包含抽象方法。抽象类虽然可以声明构造器,但是不能被实例化。继承抽象类的子类只有实现了抽象类的所有抽象方法才能被实例化,否则该类也只能是抽象类。关键字abstract不能修饰属性、构造器、private方法、static方法、final方法、final类。可以利用匿名类临时实现抽象类的抽象方法。public class AbstractClassAndMethod { publi.原创 2021-04-13 19:07:36 · 17032 阅读 · 0 评论 -
√ JavaSE - 11.怎么使用初始化块(卷1 P126)
类中可以单独声明static代码块或非static代码块。static代码块随着类的加载而执行,程序运行过程中只执行一次;非static代码块随着对象的实例化而执行,每实例化一个对象就执行一次。执行顺序:static代码块 -> 非static代码块 -> 构造器。public class InitializationBlock { public static void main(String[] args) { new Test2(); new.原创 2021-04-12 18:02:33 · 17009 阅读 · 0 评论 -
√ JavaSE - 10.怎么使用单例设计模式
单例设计模式是在类中预先实例化一个static对象,并将类的构造器设置为private,以保证该类在程序运行过程中只存在一个对象,调用该对象时通过static方法获取该对象。单例设计模式分为饿汉式和懒汉式。饿汉式是当类被加载时就实例化对象,优点是线程安全的,缺点是对象长时间占用内存。懒汉式是当获取对象时才实例化对象,优点是对象占用内存的时间短,但需要利用同步代码块使其变成线程安全的。public class InstanceDesignModel { public static void.原创 2021-04-12 16:44:17 · 17031 阅读 · 1 评论 -
√ JavaSE - 09.怎么使用自动装箱与自动拆箱(卷1 P192)
每种基本数据类型都有其对应的包装器类,将基本数据类型转换成其对应的包装器类后就可以调用包装器类中的方法。包装器类是不可变的,即包装器类的对象中的值是不可更改的,同时,包装器类还是final的,即包装器类不能派生子类。将基本数据类型赋给对应的包装器类变量,称为自动装箱;将包装器类对象赋给对应的基本数据类型变量,称为自动拆箱。特别的,Integer类的内部定义了一个static数组cache[],预先存储了-128 ~ 127范围内的Integer对象,如果使用自动装箱的方式实例化-128 ~ 127范.原创 2021-04-12 09:59:13 · 16976 阅读 · 0 评论 -
√ JavaSE - 08.怎么使用单元测试
一般来说,执行程序需要从程序的入口,即main()开始执行,但如果只想执行某一个方法,提高测试效率的话,就需要用到单元测试。进行单元测试的方法必须是public的,返回值类型为void,且没有形参;同时,该方法所属的类也必须是public的,且提供了public的空参构造器。首先导入org.junit.Test包,然后在需要进行单元测试的方法上方声明注解 @Test,即可对该方法进行单元测试。import org.junit.Test;public class JunitTest { .原创 2021-04-12 09:32:27 · 16956 阅读 · 0 评论 -
√ JavaSE - 07.怎么重写Object类的equals()和toString()(卷1 P174)
Object类的equals() 只比较两个对象的地址值是否相等,即只判断两个对象是否为同一个对象,实际应用中通常需要比较两个不同对象的各项属性值是否相等。Object类的toString() 只返回对象的类名和地址值,实际应用中通常需要返回对象的某些属性值。重写equals():首先判断两个对象的地址值是否相等,若相等,表示两个对象为同一个对象,则返回true;然后判断两个对象是否为同一类型,若不是,则返回false;最后将比较的对象通过强制类型转换赋给被比较的对象类型变量,判断两个对象的各.原创 2021-04-11 19:01:39 · 17015 阅读 · 0 评论 -
√ JavaSE - 06.怎么实现多态(卷1 P155)
多态的实现基于类的继承和方法的重写,即使用父类变量指向子类对象,编译时调用父类被重写的方法,运行时执行子类重写的方法,因此多态发生在运行时。对于重载,编译器在方法调用之前就确定所要调用的方法,称为静态绑定;对于多态,编译器在方法调用之时才确定所要调用的方法,称为动态绑定。抽象类和接口存在的意义依赖于多态。父类变量不能直接调用子类对象特有的属性和方法,需要先通过强制类型转换将父类变量赋给子类变量,再通过子类变量才能调用子类对象特有的属性和方法。为了避免在向下转型时出现异常,通常先利用关键字insta.原创 2021-04-11 15:19:35 · 17047 阅读 · 0 评论 -
√ JavaSE - 05.怎么重写父类的方法(卷1 P155)
父类被重写的方法和子类重写的方法必须都是非static的。对于访问修饰符,子类方法不能小于父类方法;若父类方法是private的,则子类不能重写该方法。对于方法名和形参列表,子类方法必须与父类方法相同。对于返回值类型,若父类方法是void或基本数据类型,则子类方法必须与父类方法相同;若父类方法是引用数据类型,则子类方法只能返回与父类方法相同的类型或其子类。对于异常,若父类方法抛出异常,则子类方法只能抛出与父类方法相同的异常或其子类。public class OverrideMethod { .原创 2021-04-11 09:55:33 · 16973 阅读 · 0 评论 -
√ JavaSE - 04.怎么使用关键字this和super(卷1 P126 P155)
关键字this可以调用本类的构造器或方法,关键字super可以调用父类的构造器或方法。使用this调用本类其他构造器或使用super调用父类构造器时,this或super必须放在构造器中的第一行,而且一个构造器最多存在一个this或super。如果一个类声明了n个构造器,则最多允许n-1个构造器使用this调用本类其他构造器,以免出现环路、陷入死循环。若构造器中没有使用this或super调用其他构造器,则默认使用super调用父类的空参构造器。public class ThisAndSuper.原创 2021-04-11 09:55:07 · 16961 阅读 · 0 评论 -
√ JavaSE - 03.怎么使用可变个数形参(卷1 P195)
可变个数形参等价于数组形参,是数组形参的简便写法。形参列表中最多存在一个可变个数形参,且只能是形参列表的最后一个参数。若存在重载方法,则调用时优先调用确定个数形参方法。public class VariableNumberParameter { public static void main(String[] args) { System.out.println(Test.getMaxNumber(-88, 88, 6, 45, 0, 0.02)); Sys.原创 2021-04-11 09:54:32 · 16970 阅读 · 0 评论 -
√ JavaSE - 02.怎么打印回形数
回形数是一个矩阵输出,给定矩阵的宽和高,从矩阵的左上角开始,往右依次打印数字0、1、2、……,每个数字占用1个单位的宽高空间。到达矩阵边界后,顺时针旋转90度继续打印,以此类推,直到把矩阵填满。import java.util.Scanner;public class LoopNumber { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); .原创 2021-04-11 09:41:05 · 16988 阅读 · 0 评论 -
√ JavaSE - 01.常用的数据类型(卷1 P29 P34)
Java中的数据类型分为基本数据类型、引用数据类型。基本数据类型:整型(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean)。类型存储需求取值范围装箱类型byte1个字节-128 ~ 127Byteshort2个字节-3 2768 ~ 3 2767Shortint4个字节-21 4748 3648 ~ 21 4748 3647Integerlong8个字节-922 3.原创 2021-04-05 20:13:47 · 16986 阅读 · 0 评论