统计
  • 建站日期:2021-03-10
  • 文章总数:120 篇
  • 评论总数:0 条
  • 分类总数:16 个
  • 最后更新:6月20日
文章 代码笔记

java基础

叶子
首页 代码笔记 正文


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第1
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第2
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第3
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第4
张图片

6、javadoc文档生成

# cmd命令将java文件生成文档
javadoc -encoding UTF-8 -charset UTF-8 Ceshi.java
package com.ruoyi;

/**
 * @author laownag
 * @version 1.8
 * @since 1.7
 *
 */
public class Ceshi {

    /**
     *
     *
     * @param name
     * @throws
     * @Return
     * @author 老王
     */
    public void setname(String name){

    }
    public static void main(String[] args) {
        int i1=15;
        int i2=015;
        int i3=0x18D;
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
    }
}


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第5
张图片

7、对象到底是啥


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第6
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第7
张图片

8、多态


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第8
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第9
张图片

9、多态继承对象,综合例子


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第10
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第11
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第12
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第13
张图片

10、final、成员变量、局部变量、static变量

1、final修饰成员变量(包括实例变量和静态变量)


    //成员变量=实例变量, 没有全局变量的说明,在java中,静态变量也就是类变量,有全局变量的含义
    // 如果在声明时已赋值,构造器和初始化块不能再赋值
    //如果在初始化块赋值,所有构造器都不能再赋值

    // 初始化没赋值,可以在构造函数或者初始化中赋值  两者选一个
    private final String name;
    // 初始化块中赋值name
    {
        name = "InitialValue"; // 先被初始化块赋值  那么下面的有参和无参构造器,都不能再赋值,除非这句话删除,下面两个构造函数才不报错
    }
    // 构造器中赋值name
    public Test01() {
         this.name = "NewValue"; // 错误!不能二次赋值  除非初始化块代码删除
    }
    //构造器中赋值name
    public Test01(String name) {
         this.name = name; // 错误!初始化块已赋值  不能二次赋值  除非初始化块代码删除
    }   

2. final 修饰局部变量(办法内)

# 特点:
# 可在声明时或后续初始化(仅一次)
# 作用域仅限于方法/代码块内
# 常用于常量计算值

// 办法
public void calculate() {
    final double PI = 3.14;  // 声明时初始化
    // PI = 3.1415;  // 编译错误(禁止二次赋值)

    final int result;
    result = 100;  // 后续初始化(只能赋值一次)
    // result = 100.1415;  // 编译错误(禁止二次赋值)
}

3. final 修饰静态变量(类变量/"全局变量")

public class Constants {
    // 声明时初始化(或静态块中)
    public static final double PI = 3.1415926;  

    static {
        // PI = 3.14; // 错误:静态final变量只能赋值一次
    }

    // 初始化没赋值,可以在构造函数或者初始化中赋值  两者选一个
    private final String name;
    // 初始化块中赋值name
    {
        name = "InitialValue"; // 先被初始化块赋值  那么下面的有参和无参构造器,都不能再赋值
    }

}

4. final 修饰方法,该方法不能被覆盖或重写

特点:
   禁止子类重写该方法
   常用于核心算法或安全相关方法

lass Parent {
    // 禁止子类重写此方法
    public final void secureMethod() {
        System.out.println("不可修改的核心逻辑");
    }
}

class Child extends Parent {
    // 错误示例:不能重写final方法
    // @Override
    // public void secureMethod() { ... }
}


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第14
张图片

5. final 修饰方法参数

/*
特点:
    基本类型:参数值不可变
    引用类型:引用地址不可变(对象内容可变)
    常用于防止意外修改参数
*/

public void process(final int id, final List<String> list) {
    // id = 100;  // 编译错误(基本类型不可修改值)
    list.add("new");  // 允许操作对象内容

    // list = new ArrayList<>();  // 编译错误(禁止修改引用)

    // 引用类型:引用地址不可变(对象内容可变)
    final int[] arr=[1,3,5,7];
    arr[2]=85;
    arr=new int[3,7,3,5,7];// 编译错误(引用地址不可改变,内容可以)

}

public static void main(String[] args) {
        process(null,5);
}
public static void process(final String name,final int id) {
    // name="555";// 错误,name已经被赋值 process(null,5);为null
    System.out.println(name);
}


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第15
张图片

6、final修饰的类,该类不能被继承


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第16
张图片

11、单例模式设计模式

单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。

I、好处和优点

​ 节省资源:避免频繁创建和销毁对象,尤其适用于重量级对象。
​ 控制访问:保证全局唯一性,便于协调系统行为。
​ 简化共享:提供一个全局访问点,方便多个模块共享同一个实例。

II、缺点

​ 滥用风险:过度使用可能导致代码耦合严重,难以维护和测试。
​ 并发问题:在多线程环境下需要额外处理线程安全问题。
​ 生命周期管理复杂:单例对象的生命周期与应用程序一致,可能占用内存较久。

III、适用场景

​ 资源共享:如数据库连接池、日志记录器等。
​ 全局状态管理:需要统一管理某些全局状态或配置信息。
​ 工具类:如缓存实现、工厂类等,通常只需要一个实例。

IV、常见写法

. 饿汉式(静态常量)
// 特点:类加载时就初始化实例,线程安全。
// 缺点:如果实例未被使用,会浪费资源。

public class Student {
    public static final Student st = new Student();

    private Student() {}
}

 /*第一种*/
    // 如果这个静态变量是public说明外面可以直接  Student student = Student.st;
    // 也可以令 Student.st=null;就会修改这个st对象的值,为了这个对象的值不能被修改,加入final
    public static final Student st=new Student();

    /*第2种
    *
    * 当private私有化后,说明外界就不能  Student student = Student.st;
    * 那么我们就可以通过getStudent()方法获取到这个对象了。
    *
    * */
    private static final Student st2=new Student();

    public static Student getStudent(){
        return st;
    }

    // 将无参构造函数私有化,确保单例类对外不能创建,避免创建多个实例   只能通过类.静态变量获取实例
    private Student(){

    }
. 懒汉式(延迟加载)
//特点:首次调用时才创建实例,节省资源。
//缺点:非线程安全,需加锁处理。

public class Student {
    private static Student instance;

    private Student() {}

    public static Student getInstance() {
        if (instance == null) {
            instance = new Student();
        }
        return instance;
    }
}

private static  Student st;

    // 毕竟静态,如果不是静态,根本调用不了这个办法,因为在外面无法创建实例啦,构造函数私有啦,所以必须静态
    // 只有办法是静态的,才能用  类名.办法名  调用这个办法。
    public static Student getSt() {

        // 简单问题 不要复杂化
//        if(this.st instanceof  Student){
        if(st == null){
            st = new Student();
        }
        return st;
}
. 双重检查锁定(线程安全)
// 特点:延迟加载且线程安全。
// 注意:volatile关键字防止指令重排。

public class Student {
    private static volatile Student instance;

    private Student() {}

    public static Student getInstance() {
        if (instance == null) {
            synchronized (Student.class) {
                if (instance == null) {
                    instance = new Student();
                }
            }
        }
        return instance;
    }
}
. 静态内部类(推荐)
// 特点:利用类加载机制保证线程安全,同时支持延迟加载。

public class Student {
    private Student() {}

    private static class SingletonHolder {
        private static final Student INSTANCE = new Student();
    }

    public static Student getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
. 枚举(最推荐)

​ 枚举单例是实现单例模式的一种高效、简洁且安全的方式,被广泛认为是最推荐的单例实现方式之一。它利用了 Java 枚举(enum)本身的特性来保证单例的唯一性和线程安全性。

/**
特点:天然线程安全,防反射破坏单例。
缺点:不支持延迟加载。

*/

public enum Student {
    // 
    // 
    /*
    它是一个类的静态常量(static final),保存了该类的唯一对象。
    外部通过访问这个 INSTANCE 来使用该类的单例对象。

    在这个例子中:
    INSTANCE 是 Student 枚举的一个枚举常量。
    因为枚举默认只会加载一次,所以 INSTANCE 就是全局唯一的实例。
    使用方式非常简单:Student student=类名.INSTANCE

    */
    INSTANCE;

    // 可以添加属性和方法
    public void doSomething() {
        System.out.println("Student is doing something.");
    }
}

// 使用方式

Student student = Student.INSTANCE;
student.doSomething();

为什么推荐使用枚举实现单例?
1. 天然线程安全
枚举实例的创建在类加载时完成,JVM 保证其线程安全。
不需要手动加锁或使用 synchronized。
2. 防止反射攻击
普通单例(如懒汉式)如果构造函数没有特殊处理,可能通过反射破坏单例。
枚举类的构造函数不能通过反射调用,因此更安全。
3. 防止反序列化破坏单例
如果单例类实现了 Serializable 接口,在反序列化时可能会创建新实例。
枚举可以自动处理反序列化,确保返回的是同一个实例。
4. 代码简洁易维护
相比双重检查锁定、静态内部类等方式,枚举写法更加简洁明了。
5. 可扩展性强
枚举不仅可以定义实例,还可以定义方法、字段、甚至抽象行为,适合复杂场景。

⚠️ 缺点(局限性)
缺点
说明
不支持延迟加载
枚举实例在类加载时就会初始化,无法做到按需加载。
功能扩展有限制
如果需要继承其他类或实现多个接口,可能会受限于 Java 的单继承机制。

📌 适用场景
需要高并发、线程安全的环境。
单例对象不需要延迟加载。
希望代码简洁、易于维护。
需要防止反射/反序列化破坏单例的情况。

✅ 总结
枚举单例是目前 Java 中实现单例最推荐的方式之一,尤其适用于:
“不需要延迟加载 + 强调安全性和简洁性” 的场景。
如果你希望避免多线程问题、反射攻击以及反序列化带来的隐患,同时又追求代码简洁,那么使用 enum 实现单例是非常合适的选择。
.总结

​ 如果对性能要求不高,可以选择饿汉式或静态内部类。
​ 如果需要延迟加载,建议使用双重检查锁定或静态内部类。
​ 如果追求简洁和安全性,可以使用枚举方式。
​ 选择合适的写法取决于具体业务需求和性能要求。

12、枚举类


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第17
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第18
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第19
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第20
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第21
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第22
张图片

13、抽象类


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第23
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第24
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第25
张图片

1、使用抽象类的好处

例如猫头鹰和鸽子,都属于动物,也就是将动物定义成一个抽象类,里面有动物名称,和飞行的抽象办法。

猫头鹰和鸽子都属于动物,就继承动物的抽象类,实现飞行的办法,也就是鸽子和猫头鹰有相同的属性就弄成一个抽象类,聚集的都是同种品类的动物的相同属性,不同属性在子类独有编辑即可,例如鸽子和猫头鹰还有其他行为,例如鸽子喜欢吃虫子,猫头鹰喜欢捕食。

动物 dw=new 鸽子();

动物 mty=new 猫头鹰();

dw.父类属性、dw.父类办法、dw.子类独有的办法、dw.子类独有的属性

这样是一个多态。


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第26
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第27
张图片

14、模板办法设计模式【抽象类的使用场景之一】


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第28
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第29
张图片


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第30
张图片

一开始没优化


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第31
张图片

简化后

模板办法用final修饰,使用模板办法只能被调用,不能被重写。


java基础
-枫叶书涯-叶子博客 - 莫問前路遙遠- 與君風雪
-第32
张图片

看完后的心情
当前内容共有0人进行评价
您的评价对其他人很有帮助,请认真对待!
×
精品总值得回味
当前内容共有0人收藏
账号未登录

您还未登录,请登录账号之后再进行操作

×
感谢支持与厚爱
  • 微信支付
  • 支付宝支付
微信收款码
支付宝收款码
打赏请备注姓名及联系方式,方便进行感谢!
×
分享给朋友
使用微信手机QQ微博扫码分享
×
×

扫描二维码,在手机上阅读

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
php的DOMDocument来解析HTML,实现豆瓣信息爬虫
下一篇 »

相关推荐

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。

微语录

  • 2025-06-13:周一到周四,都是红的,今天周五,而且大盘指数上了3400,明明我周3周四都在防3400回调,我为何周五忘记了呢,是不是有点不把钱当回事了呢。

    叶子_ 18 天前 更多微语

最新文章

热门文章

最新评论

标签