花几千上万学习Java,真没必要!(二十二)

news2024/11/25 20:40:31

1、final关键字:

 

测试代码1:

package finaltest.com;

public class FinalBasicDemo {
	public static void main(String[] args) {
		// final修饰基本数据类型变量
		final int number = 5;

		// 尝试修改number的值,这将导致编译错误
		// number = 10; // 这行会报错

		System.out.println("number: " + number);
	}
}

测试代码2:

package finaltest.com;
 //final关键字
public class FinalDemo {  

 // final静态变量,在声明时初始化  
 private static final int MAX_SIZE = 100;  

 // final实例变量,通常在构造方法中初始化  
 private final String name;  

 // final局部变量,通常在声明时或初始化块中初始化  
 // 不直接在类中声明final局部变量,因为它需要被赋值  

 // 构造方法  
 public FinalDemo(String name) {  
     this.name = name; // 初始化final实例变量  
 }  

 // final方法,表示该方法不能被子类重写  
 public final void showDetails() {  
     System.out.println("Name: " + name);  
     System.out.println("Max Size: " + MAX_SIZE);  
 }  

 // 普通方法,在方法内部使用final局部变量  
 public void processData(int[] data) {  
     // final局部变量,在声明时初始化  
     final int threshold = 50;  

     for (int i = 0; i < data.length; i++) {  
         if (data[i] > threshold) {  
             System.out.println("Data[" + i + "]: " + data[i] + " is greater than threshold.");  
         }  
     }  
 }  

 // main方法,测试FinalDemo类  
 public static void main(String[] args) {  
     // 创建FinalDemo对象  
     FinalDemo demo = new FinalDemo("ExampleObject");  

     // 调用final方法  
     demo.showDetails();  

     // 调用普通方法,并传递一个整数数组  
     int[] data = {20, 60, 30, 80, 40};  
     demo.processData(data);  

     // 尝试修改final静态变量的值(编译错误)  
     //FinalDemo.MAX_SIZE = 200; // 这行会报错  

     // 尝试在构造方法之外修改final实例变量的值(编译错误)  
     // demo.name = "NewName"; // 这行也会报错  
 }   
}

运行结果如下:

 

测试代码3:

package finaltest.com;
public class FinalReferenceDemo {  
    static class MyObject {  
        int value;  
  
        public MyObject(int value) {  
            this.value = value;  
        }  
  
        public void setValue(int value) {  
            this.value = value;  
        }  
  
        @Override  
        public String toString() {  
            return "MyObject{" + "value=" + value + '}';  
        }  
    }  
  
    public static void main(String[] args) {  
        // final修饰引用数据类型变量  
        final MyObject obj = new MyObject(10);  
  
        // 尝试修改obj的引用(即对象的地址),将导致编译错误  
        // MyObject newObj = new MyObject(20);  
        // obj = newObj; // 这行会报错  
  
        // 可以改变obj引用对象内部的数据  
        obj.setValue(20);  
  
        System.out.println(obj); 
    }  
}

 测试代码4:

package finaltest.com;
//一个 final 实例变量 finalInstanceVar,它必须在构造方法中初始化。
//一个 static final 静态变量 STATIC_FINAL_VAR,它在声明时就被初始化了,并且可以通过类名直接访问。
//一个 final 方法 finalMethod,该方法不能被任何子类重写。
//一个普通方法 printInfo,用于打印实例变量和静态变量的值。
public class MyClass {  
  
    // final 实例变量,必须在构造方法中初始化  
    private final int finalInstanceVartest;  
  
    // final 静态变量,在声明时初始化  
    private static final int STATIC_FINAL_VAR = 42;  
  
    // 构造方法,用于初始化final实例变量  
    public MyClass(int finalInstanceVar) {  
        this.finalInstanceVartest = finalInstanceVar;  
    }  
  
    // final 方法,表示该方法不能被重写  
    public final void finalMethod() {  
        System.out.println("This is a final method.");  
    }  
  
    // 普通方法,可以访问final变量  
    public void printInfo() {  
        System.out.println("Final instance var: " + finalInstanceVartest);  
        System.out.println("Static final var: " + STATIC_FINAL_VAR);  
    }  
  
    // main 方法,测试这个类  
    public static void main(String[] args) {  
        MyClass obj = new MyClass(10);  
        obj.finalMethod(); // 调用final方法  
        obj.printInfo(); // 调用普通方法,打印信息  
  
        // 尝试访问静态final变量,可以直接通过类名访问  
        System.out.println("Direct access to static final var: " + MyClass.STATIC_FINAL_VAR);  
    }  
}

运行结果如下:

 

2、static关键字:

 

测试代码1:

package finaltest.com;
public class StaticDemo {  
    // 静态变量  
    static int counter = 0;  
  
    // 静态初始化块  
    static {  
        System.out.println("Static block initialized");  
    }  
  
    // 静态内部类  
    static class StaticInner {  
        public void display() {  
            System.out.println("Static inner class method");  
        }  
    }  
  
    // 构造方法,实现静态变量的增加  
    public StaticDemo() {  
        counter++;  
    }  
  
    // 静态方法  
    public static int add(int a, int b) {  
        return a + b;  
    }  
  
    // 主方法,说明静态变量、静态方法和静态内部类的使用  
    public static void main(String[] args) {  
        // 静态代码块会在类加载时自动执行  
  
        // 调用静态方法  
        System.out.println("Sum of 5 and 3 is: " + add(5, 3));  
  
        // 访问静态变量  
        System.out.println("Number of StaticDemo objects created: " + counter);  
  
        // 使用静态内部类  
        StaticInner inner = new StaticInner();  
        
        inner.display();  
    }

    public void displayInstanceCount() {  
        // 直接访问静态变量instanceCount并打印其值  
        System.out.println("Number of StaticDemo objects created: " + counter);  
    } 
}

运行结果如下:

 

测试代码2:

package finaltest.com;
public class StaticTest {
    // 静态变量
    private static int instanceCount = 0;

    // 静态代码块
    static {
        System.out.println("Static block initialized");
        // 实现静态变量的初始化代码
    }

    // 构造方法,实现静态变量的增加
    public StaticTest() {
        instanceCount++;
    }

    // 静态方法
    public static int add(int a, int b) {
        return a + b;
    }

    // 静态内部类
    static class DatabaseConnection {
        // 数据库连接
        private static String connectionString = "jdbc:mysql://localhost:3306/mydb";

        // 静态方法,模拟获取数据库连接
        public static String getConnectionString() {
            return connectionString;
        }

    }

    // 一个非静态方法
    public void displayInstanceCount() {
        System.out.println("Number of StaticDemo objects created: " + instanceCount);
    }

    // 主方法,说明静态和非静态成员的使用
    public static void main(String[] args) {
        // 静态代码块会在类加载时自动执行

        // 调用静态方法
        System.out.println("Sum of 5 and 3 is: " + add(5, 3));

        // 访问静态内部类的静态成员
        System.out.println("Database connection string: " + DatabaseConnection.getConnectionString());

        // 创建StaticDemo的实例
        StaticDemo obj1 = new StaticDemo();
        StaticDemo obj2 = new StaticDemo();

        // 调用非静态方法
        obj1.displayInstanceCount(); 

    }
}

运行结果如下:

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA在线文档

1.存在码 JDK21中文API 2.全栈行动派 JDK17中文API 3.mklab.cn JDK11中文API JDK8中文API JDK7-21英文API 4.docs.oracle.com JDK7-22英文文档

Python实现文本转换为语音

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

探究Type-C接口的安装方式及应用场景

在现代电子设备中&#xff0c;Type-C接口因其高速传输、可逆插拔等特点&#xff0c;越来越受到用户的青睐。而Type-C接口的安装方式也是至关重要的一环&#xff0c;影响着设备的稳定性和可靠性。本文将深入分析Type-C接口的四种主要安装方式&#xff1a;表面贴片、穿孔焊接、夹…

【C++】内存管理的深度解析与实例

C内存管理的深度解析与实例 一、C内存管理的基本概念二、C内存分配方式1. 静态内存分配2. 动态内存分配 三、C内存管理的常见问题及解决策略1. 内存泄漏2. 堆内存碎片化3. 栈溢出 四、C内存管理的最佳实践1. 使用RAII&#xff08;Resource Acquisition Is Initialization&#…

图片转pdf的软件有哪些?这几种转换工具了解下

在日常的办公学习中&#xff0c;图片转PDF的需求愈发普遍。不论是工作汇报、学习笔记还是生活点滴&#xff0c;我们都希望将重要的图片内容整理成易于查阅的PDF格式。那么&#xff0c;有哪些软件可以做到将图片转换成PDF格式呢&#xff1f;给大家介绍5种简单好用的转换方法&…

昇思25天学习打卡营第17天|CycleGAN图像风格迁移互换

CycleGAN是一种非常酷的人工智能模型&#xff0c;它能够在没有成对训练样本的情况下&#xff0c;将一种图像风格迁移到另一种图像上。比如&#xff0c;你可以把苹果的图片变成橘子的风格&#xff0c;反之亦然。 CycleGAN的网络结构&#xff0c;包括生成器和判别器&#xff0c;它…

英语语法第八课副词

文章目录 1、副词分类1.1 时间副词&#xff0c;表示时间或频率1.2 地点副词&#xff0c;表示地点或位置1.3 方式副词&#xff0c;表示行为方式1.4 程度副词&#xff0c;表示动作程度1.5 疑问副词&#xff0c;引导特殊疑问句1.6 强调副词&#xff0c;强调形容词或动词1.7 连接副…

RabbitMQ的学习和模拟实现|sqlite轻量级数据库的介绍和简单使用

SQLite3 项目仓库&#xff1a;https://github.com/ffengc/HareMQ SQLite3 什么是SQLite为什么需要用SQLite官方文档封装Helper进行一些实验 什么是SQLite SQLite是一个进程内的轻量级数据库&#xff0c;它实现了自给自足的、无服务器的、零配置的、事务性的 SQL数据库引擎…

Linux shell编程学习笔记65: nice命令 显示和调整进程优先级

0 前言 我们前面学习了Linux命令ps和top&#xff0c;命令的返回信息中包括优先序&#xff08;NI&#xff0c;nice&#xff09; &#xff0c;我们可以使用nice命令来设置进程优先级。 1 nice命令 的功能、格式和选项说明 1.1 nice命令 的功能 nice命令的功能是用于调整进程的…

ARM 单片机裸机任务调度框架

前言&#xff1a; 在没有使用操作系统的情况下&#xff0c;一个合理的裸机任务调度方式&#xff0c;可以更好的提供数据的处理&#xff0c;和用户体验&#xff0c;有多种任务调度的方式。 方案 1&#xff1a; 从上到下的任务调度方式&#xff0c;C语言程序的代码是在main函数…

重生之我在学数据结构——队列

一.队列的概念 队列是一种先进先出(First In First Out &#xff0c;FIFO)的数据结构&#xff0c;可以简单理解为排队的概念。在队列中&#xff0c;数据项按照插入的顺序排列&#xff0c;并且只能在队列的一端插入&#xff08;称为队尾&#xff09;&#xff0c;在另一端删除&a…

Vue项目实现单点登录(SSO)的逻辑和基本流程

项目集群如果一个一个登录会非常麻烦&#xff0c;尤其是一些大企业或者多项目使用一套体系数据的环境中&#xff0c;这时候登录中心也就应用而生&#xff0c; 今天简单说一下vue sso的实现思路&#xff0c;vue项目实现单点登录&#xff08;SSO&#xff09;通常涉及以下几个步骤…

JVM调优:根据JVM自带工具定位问题(jps、jstat、Visual VM的使用)

JVM调优步骤 发现问题、定位问题、解决问题 发现问题 常见问题如下 GC频繁CPU负载过高内存溢出&#xff08;OOM&#xff09;内存泄露死锁程序响应时间较长 用JDK自带命令调优工具定位问题 jps&#xff08;java process status&#xff09;:查看正在运行的Java进程 基本语…

图解正激和Buck AC/DC转换

所谓正激式 正激方式是构造较简单&#xff0c;容易控制&#xff0c;非常普遍的方式之一。 其特征是输出功率比反激方式大&#xff0c;但必须加装电感和续流二极管&#xff08;转流二极管&#xff1a;D2&#xff09;。此外&#xff0c;和反激式相同&#xff0c;能利用光耦合器…

将半自动化标签绘制在原图上

用yolov8的推理,做了半自动化标签处理。 yolo的标签格式是: 标签 + 每个顶点的坐标 比如: 第一个数字0是类别,后面是每个顶点的坐标,(x,y)这样的。 而且可能是多行的 所以,要把标签画在原图上,看看打的对不对。 画标签到原图上.py import os import cv2 import n…

K3s部署及研究

这里写自定义目录标题 K3s和K8s的部署及研究Kubernetes (K8s)K3s使用场景总结1、备份系统自带yum源配置文件2、进入 /etc/yum.repos.d3、删除文件4、设置5、缓存 K3s和K8s的部署及研究 K3s 和 K8s&#xff08;Kubernetes&#xff09;是两个相关但不同的容器编排平台。以下是对…

43 华三AC登录Web页面

一 无线上WEB页面 1 创建vlan 56 [AC-KongZhi]vlan 56 2 退出 [AC-KongZhi-vlan56]quit 3 进入vlan三层口 配置IP地址 [AC-KongZhi]interface Vlan-interface 56 [AC-KongZhi-Vlan-interface56]ip address 192.168.56.55 24 4 在AC控制器与Host主机的接口上能通关vlan 5…

基于Nginx搭建RTMP流媒体服务器视频无法保存

文章目录 基于Nginx搭建RTMP流媒体服务器安装Nginx-RTMPNginx 配置文件 视频无法保存 基于Nginx搭建RTMP流媒体服务器 安装Nginx-RTMP 要实现RTMP流媒体服务器需要安装Nginx-RTMP模块 已有Nginx安装Nginx-RTMP模块 sudo apt update sudo apt install libnginx-mod-rtmp可能会…

心动小站Ⅰ--矢量数据库:塑造 AI 技术的新时代

前言 随着专家预测的采用率不断提高以及教育资源的引入&#xff0c;矢量数据库将在塑造下一个 AI 技术时代中发挥关键作用。矢量数据库相对于传统数据库的优势越来越明显&#xff0c;使其成为 AI 和机器学习应用不可或缺的工具。以下是矢量数据库受到关注并有望彻底改变 AI 技…

Leetcode - 周赛406

目录 一&#xff0c;3216. 交换后字典序最小的字符串 二&#xff0c;3217. 从链表中移除在数组中存在的节点 三&#xff0c;3218. 切蛋糕的最小总开销 I 四&#xff0c;3219. 切蛋糕的最小总开销 II 一&#xff0c;3216. 交换后字典序最小的字符串 本题要求交换一次相邻字符…