![](https://img-blog.csdnimg.cn/e0d2b187d5b0497f9832b2a02d21e85c.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java中级
文章平均质量分 63
Java中级内容,如何让代码和程序更加优雅
松仔log
初出茅庐的程序员
展开
-
Java中级——lambda表达式
lambda表达式lambda表达式是什么?三级目录lambda表达式是什么?lambda表达式是一个可传递的代码块,可以在以后执行一次或多次三级目录原创 2023-09-09 16:13:20 · 201 阅读 · 0 评论 -
Java中级——重载的选择是静态的,重写的选择是动态的
下面调用将打印3次Collection,因为传递的参数为Collection类型,调用哪个重载方法是在编译时做出决定的。造成这样的结果是因为List的remove()方法具有重载,第一个为删除指定元素,第二个为删除指定位置的元素。对于如下程序,打印为[-3, -2, -1]、[-2, 0, 2]重写指的是子类和父类有相同方法签名,通过多态实现运行时绑定。重载指的是有相同方法名,但有不同参数类型或顺序的一类方法。正确的方式应该是使用instanceof判断,或。故如果要正确调用删除指定元素,应该如下。原创 2022-09-22 15:59:09 · 249 阅读 · 0 评论 -
Java中级——保护性拷贝
Java8之后应该使用Instant、LocalDateTime、ZonedDateTime代替,但对于可变对象域(,同时这里不调用clone,因为可能传进来的是Date的子类(通过复写clone恶意攻击)虽然修改了构造方法,但其get()方法仍然给了外面修改可变内部成员的能力,如下。但实际上,Date本身是可变的,对Date的修改会导致对Period的修改。如下为Period类,未提供set方法,看起来无法修改其内部属性。所以也要对get()方法的返回对象进行拷贝,需根据传进来的参数创建新的实例,原创 2022-09-22 09:08:49 · 193 阅读 · 0 评论 -
Java中级——enum
enum用enum代替int常量enum介绍避免使用ordinal()策略枚举用enum代替int常量在程序中,经常用int类型的常量表示对象的状态等信息,这种方式被称为int枚举模式,其是编译时常量,当int值发生变化时,需重新编译才能生效,如下public static final int OFF = 0;public static final int STANDBY = 1;public static final int ON = 2;每个enum默认继承java.lang.Enum,内原创 2022-04-07 11:36:54 · 528 阅读 · 0 评论 -
Java中级——将运行时错误改为编译时错误
比较通常用于数组的排序,根据返回值确定元素是否需要交换,以此来完成顺逆序的排序,如public static Object[] sort(Object[] objects) { for (int i = 0; i < objects.length - 1; i++) { for (int j = i + 1; j < objects.length - 1 - i; j++) { if (((Comparable) objects[i]).comp原创 2022-03-28 19:44:00 · 761 阅读 · 0 评论 -
Java中级——不可变类
不可变类不可变类是什么?优缺点通过final实现其他实现不可变类是什么?不可变类指的是实例不能被修改的类,实例中的信息都必须在创建时提供,并在其生命周期中保持不变,如String、包装类、BigInteger、BigDecimal编写不可变类要求:不提供 setter() 方法保证类不会被扩展,一般做法是声明为 final类中的域都为 private final确保对域所指向的可变对象互斥访问(其他类无法获取该域的引用)优缺点优点:比较简单,始终为被创建时的状态线程安全,不需要同原创 2022-03-25 14:53:07 · 1185 阅读 · 0 评论 -
Java中级——消除过期的对象引用
消除过期的对象引用例1——自动管理内存的类需注意内存泄漏例2——注册的回调需要取消例1——自动管理内存的类需注意内存泄漏如下简单的栈结构class Stack { private Object[] elements = new Object[16]; private int size = 0; public void push(Object e) { elements[size++] = e; } public Object pop() {原创 2022-03-21 19:02:51 · 3701 阅读 · 0 评论 -
Java中级——避免创建不必要的对象
避免创建不必要的对象例1——不要new String()例2——优先使用静态工厂方法例3——将频繁使用的表达式声明为静态常量例4——避免自动装箱例1——不要new String()在创建字符串时,不需要newString s1 = "hello";String s2 = new String("hello");如上,针对s2的new创建是多余的,不过这方面编译器也会进行优化例2——优先使用静态工厂方法如判断奇偶数的程序,用构造器设计如下final class Parity { pri原创 2022-03-21 16:17:06 · 756 阅读 · 0 评论 -
Java中级——优先使用依赖注入来引入资源
优先使用依赖注入来引入资源依赖注入是什么?举例不适用情况静态工具类单例依赖注入是什么?资源指的是在系统中不变的属性依赖注入指的是程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入总结起来就是 final 域不需要在刚创建时初始化,可通过构造函数动态赋值,因为final放在常量区,也间接实现了底层资源共享举例如下当定义一个final域时,不对其初始化会报错如下代码,当拼写检查器SpellChecker的dictionary已经初始化为英语字典Eng原创 2022-03-21 15:16:47 · 311 阅读 · 0 评论 -
Java中级——工具类不应该被实例化
工具类不应该被实例化工具类是什么?错误实现方式——作为抽象类正确实现方法——私有化构造器工具类是什么?工具类指的是内部只有静态方法和静态域的类,其不应该被实例化,因为其内部的方法和域可通过类名直接调用错误实现方式——作为抽象类默认编译器会提供一个缺省无参构造器,将工具类声明为抽象类可避免其的调用如下是一个比较大小的工具类,将其声明为abstractabstract class Utils { public static String compare(int a, int b) {原创 2022-03-19 10:24:06 · 693 阅读 · 0 评论 -
Java中级——用静态工厂方法代替构造器
用静态工厂方法代替构造器静态工厂方法和构造器是什么?优点1——具有方法名的静态工厂方法更利于理解优点2——具有方法名的静态工厂方法可打破构造器签名的限制静态工厂方法和构造器是什么?构造器即构造函数,用于生成类实例静态工厂方法不同于设计模式中的工厂方法,而是一个返回类实例的静态方法优点1——具有方法名的静态工厂方法更利于理解如一个输入数字,返回其是奇数还是偶数的字符串,利用构造器的设计如下class A { private String value; A(int num) {原创 2022-03-18 10:53:28 · 1491 阅读 · 2 评论 -
Java中级——返回两个变量
返回两个变量需求实现1实现2实现3实现4(最佳实现1)实现5(最佳实现2)需求实现用于同时返回数组最大值和最小值的类实现1MinMax有两个方法,分别获取数组的最大值和最小值class MinMax { public static int getMin(int[] array) { int min = Integer.MAX_VALUE; for (int i : array) { if (i < min) {原创 2021-09-13 16:49:25 · 1999 阅读 · 1 评论 -
Java中级——块及其执行顺序
块的执行顺序块的执行顺序二级目录三级目录块的执行顺序在二级目录三级目录原创 2021-09-13 13:52:39 · 106 阅读 · 1 评论 -
Java中级——Object和Objects
ObjectObject是什么?多态equals方法hashcode方法Object是什么?Object类是所有Java类的父类,如果没有明确指出父类,Object就默认为此类的父类多态所有Object类型的变量可以引用除基本数据类型外的各种对象class Person {}但要对其操作还得转为对应的数据类型Object o = new Person();Person p = (Person) o;此外,所有数组都扩展了Object类Object o = new Object()原创 2021-09-02 10:56:08 · 1587 阅读 · 1 评论 -
Java中级——Comparable和Comparator
Comparable和ComparatorComparable和Comparator是什么?Comparable接口实现子类Comparable接口实现Comparator接口实现Comparable和Comparator是什么?两者都是用于重定义比较规则的接口,实现它们要重写其中的比较方法Comparable接口实现定义MyComparable<T>接口interface MyComparable<T> { public int myCompareTo(T o);原创 2021-09-02 14:17:13 · 283 阅读 · 0 评论 -
Java中级——private、default和protect详解
private详解:一个方法可以访问所属类所有实例对象或其内部类的私有部分a和b都是Person类的对象,a调用equal()方法不仅可以访问自身的this.name还可以访问b.nameclass Person { private String name; public Person(String name) { this.name = name; } public boolean equal(Person person) { ret原创 2021-09-02 11:42:23 · 1515 阅读 · 0 评论