JDK5News

本文详细介绍了JDK5引入的新特性,包括泛型、增强for循环、静态导入、可变参数等,并通过实例展示了这些特性的具体应用。

ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。

 * A:迭代器
 * B:普通for

 * C:增强for

package JDK5News;
import java.util.ArrayList;
import java.util.Iterator;

/*
 * ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。
 * A:迭代器
 * B:普通for
 * C:增强for
 */
public class Demo01 {
	public static void main(String[] args) {
		// 创建集合对象
		ArrayList<String> array = new ArrayList<String>();

		// 创建并添加元素
		array.add("hello");
		array.add("world");
		array.add("java");

		// 遍历集合
		// 迭代器
		Iterator<String> it = array.iterator();
		while (it.hasNext()) {
			String s = it.next();
			System.out.println(s);
		}
		System.out.println("------------------");

		// 普通for
		for (int x = 0; x < array.size(); x++) {
			String s = array.get(x);
			System.out.println(s);
		}
		System.out.println("------------------");

		// 增强for
		for (String s : array) {
			System.out.println(s);
		}
	}
}

JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举

 * 
 * 增强for:是for循环的一种。
 * 
 * 格式:
 * for(元素数据类型 变量 : 数组或者Collection集合) {
 * 使用变量即可,该变量就是元素
 *    }
 *   
 * 好处:简化了数组和集合的遍历。
 * 
 * 弊端: 增强for的目标不能为null。

 * 如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。

package JDK5News;
import java.util.ArrayList;
import java.util.List;

/*
 * JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举
 * 
 * 增强for:是for循环的一种。
 * 
 * 格式:
 * 		for(元素数据类型 变量 : 数组或者Collection集合) {
 *			使用变量即可,该变量就是元素
 *   	}
 *   
 * 好处:简化了数组和集合的遍历。
 * 
 * 弊端: 增强for的目标不能为null。
 * 如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。
 */
public class Demo02 {
	public static void main(String[] args) {
		// 定义一个int数组
		int[] arr = { 1, 2, 3, 4, 5 };
		for (int x = 0; x < arr.length; x++) {
			System.out.println(arr[x]);
		}
		System.out.println("---------------");
		// 增强for
		for (int x : arr) {
			System.out.println(x);
		}
		System.out.println("---------------");
		// 定义一个字符串数组
		String[] strArray = { "林青霞", "风清扬", "东方不败", "刘意" };
		// 增强for
		for (String s : strArray) {
			System.out.println(s);
		}
		System.out.println("---------------");
		// 定义一个集合
		ArrayList<String> array = new ArrayList<String>();
		array.add("hello");
		array.add("world");
		array.add("java");
		// 增强for
		for (String s : array) {
			System.out.println(s);
		}
		System.out.println("---------------");

		List<String> list = null;
		// NullPointerException
		// 这个s是我们从list里面获取出来的,在获取前,它肯定还好做一个判断
		// 说白了,这就是迭代器的功能
		if (list != null) {
			for (String s : list) {
				System.out.println(s);
			}
		}

		// 增强for其实是用来替代迭代器的
		//ConcurrentModificationException
		// for (String s : array) {
		// if ("world".equals(s)) {
		// array.add("javaee");
		// }
		// }
		// System.out.println("array:" + array);
	}
}

静态导入

 * 格式:import static 包名….类名.方法名;
 * 可以直接导入到方法的级别
 * 
 * 静态导入的注意事项:
 * A:方法必须是静态的

 * B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

package JDK5News;
/*
 * 静态导入:
 * 格式:import static 包名….类名.方法名;
 * 可以直接导入到方法的级别
 * 
 * 静态导入的注意事项:
 * 		A:方法必须是静态的
 * 		B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。
 */
import static java.lang.Math.abs;
import static java.lang.Math.pow;
import static java.lang.Math.max;

//错误
//import static java.util.ArrayList.add;

public class Demo03 {

	public static void main(String[] args) {
		// System.out.println(java.lang.Math.abs(-100));
		// System.out.println(java.lang.Math.pow(2, 3));
		// System.out.println(java.lang.Math.max(20, 30));
		// 太复杂,我们就引入到import

		// System.out.println(Math.abs(-100));
		// System.out.println(Math.pow(2, 3));
		// System.out.println(Math.max(20, 30));
		// 太复杂,有更简单

//		System.out.println(abs(-100));
		System.out.println(java.lang.Math.abs(-100));
		System.out.println(pow(2, 3));
		System.out.println(max(20, 30));
	}
	
	public static void abs(String s){
		System.out.println(s);
	}
}

可变参数:定义方法的时候不知道该定义多少个参数

 * 格式:
 * 修饰符 返回值类型 方法名(数据类型…  变量名){
 * 
 * }
 * 
 * 注意:
 * 这里的变量其实是一个数组

 * 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

package JDK5News;
/*
 * 可变参数:定义方法的时候不知道该定义多少个参数
 * 格式:
 * 		修饰符 返回值类型 方法名(数据类型…  变量名){
 * 
 * 		}
 * 
 * 		注意:
 * 			这里的变量其实是一个数组
 * 			如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
 */	
public class Demo04 {
	public static void main(String[] args) {
		// 2个数据求和
		int a = 10;
		int b = 20;
		int result = sum(a, b);
		System.out.println("result:" + result);

		// 3个数据的求和
		int c = 30;
		result = sum(a, b, c);
		System.out.println("result:" + result);

		// 4个数据的求和
		int d = 30;
		result = sum(a, b, c, d);
		System.out.println("result:" + result);

		// 需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了
		// 为了解决这个问题,Java就提供了一个东西:可变参数
		result = sum(a, b, c, d, 40);
		System.out.println("result:" + result);

		result = sum(a, b, c, d, 40, 50);
		System.out.println("result:" + result);
	}

	public static int sum(int... a) {
		// System.out.println(a);
		//return 0;

		int s = 0;
		
		for(int x : a){
			s +=x;
		}
		
		return s;
	}

	// public static int sum(int a, int b, int c, int d) {
	// return a + b + c + d;
	// }
	//
	// public static int sum(int a, int b, int c) {
	// return a + b + c;
	// }
	//
	// public static int sum(int a, int b) {
	// return a + b;
	// }
}

public static <T> List<T> asList(T... a):把数组转成集合


 * 注意事项:
 * 虽然可以把数组转成集合,但是集合的长度不能改变。

package JDK5News;

import java.util.Arrays;
import java.util.List;

/*
 * public static <T> List<T> asList(T... a):把数组转成集合
 * 
 * 注意事项:
 * 		虽然可以把数组转成集合,但是集合的长度不能改变。
 */
public class Demo05 {
	public static void main(String[] args) {
		// 定义一个数组
		// String[] strArray = { "hello", "world", "java" };
		// List<String> list = Arrays.asList(strArray);

		List<String> list = Arrays.asList("hello", "world", "java");
		// UnsupportedOperationException
		// list.add("javaee");
		// UnsupportedOperationException
		// list.remove(1);
		list.set(1, "javaee");

		for (String s : list) {
			System.out.println(s);
		}
	}
}

【轴承故障诊断】加权多尺度字典学习模型(WMSDL)及其在轴承故障诊断上的应用(Matlab代码实现)内容概要:本文介绍了加权多尺度字典学习模型(WMSDL)在轴承故障诊断中的应用,并提供了基于Matlab的代码实现。该模型结合多尺度分析与字典学习技术,能够有效提取轴承振动信号中的故障特征,提升故障识别精度。文档重点阐述了WMSDL模型的理论基础、算法流程及其在实际故障诊断中的实施步骤,展示了其相较于传统方法在特征表达能力和诊断准确性方面的优势。同时,文中还提及该资源属于一个涵盖多个科研方向的技术合集,包括智能优化算法、机器学习、信号处理、电力系统等多个领域的Matlab仿真案例。; 适合人群:具备一定信号处理和机器学习基础,从事机械故障诊断、工业自动化、智能制造等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并掌握加权多尺度字典学习模型的基本原理与实现方法;②将其应用于旋转机械的轴承故障特征提取与智能诊断;③结合实际工程数据复现算法,提升故障诊断系统的准确性和鲁棒性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注字典学习的训练过程与多尺度分解的实现细节,同时可参考文中提到的其他相关技术(如VMD、CNN、BILSTM等)进行对比实验与算法优化。
【硕士论文复现】可再生能源发电与电动汽车的协同调度策略研究(Matlab代码实现)内容概要:本文档围绕“可再生能源发电与电动汽车的协同调度策略研究”展开,旨在通过Matlab代码复现硕士论文中的核心模型与算法,探讨可再生能源(如风电、光伏)与大规模电动汽车接入电网后的协同优化调度方法。研究重点包括考虑需求侧响应的多时间尺度调度、电动汽车集群有序充电优化、源荷不确定性建模及鲁棒优化方法的应用。文中提供了完整的Matlab实现代码与仿真模型,涵盖从场景生成、数学建模到求解算法(如NSGA-III、粒子群优化、ADMM等)的全过程,帮助读者深入理解微电网与智能电网中的能量管理机制。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、电动汽车等领域技术研发的工程人员。; 使用场景及目标:①用于复现和验证硕士论文中的协同调度模型;②支撑科研工作中关于可再生能源消纳、电动汽车V2G调度、需求响应机制等课题的算法开发与仿真验证;③作为教学案例辅助讲授能源互联网中的优化调度理论与实践。; 阅读建议:建议结合文档提供的网盘资源下载完整代码,按照目录顺序逐步学习各模块实现,重点关注模型构建逻辑与优化算法的Matlab实现细节,并通过修改参数进行仿真实验以加深理解。
<think>根据之前的上下文,我们已经知道Logback 1.3.x要求JDK 1.8+。现在关于Logback 1.4.x的JDK要求,我们可以从Logback官方文档和发布说明中得知。 实际上,Logback 1.4.x同样要求最低JDK版本为1.8(Java 8),并且支持到最新的Java版本(如Java 17、Java 21等)。 以下是详细回答: </think>Logback 1.4.x 需要 **Java 8 (JDK 1.8) 或更高版本**,这是其最低要求。以下是与不同 JDK 版本的兼容性详情: ### Logback 1.4.x JDK 兼容性矩阵 | JDK 版本 | 兼容状态 | 注意事项 | |------------------|----------|----------| | **JDK 1.8+** | ✅ 完全支持 | 最低要求版本 | | JDK 9 - JDK 20 | ✅ 完全支持 | 通过 CI 持续测试 | | **JDK 21+** | ✅ 完全支持 | [2023年10月验证](https://logback.qos.ch/news.html) | | JDK 1.7 及以下 | ❌ 不支持 | 会抛出 `UnsupportedClassVersionError` | ### 验证兼容性代码 ```java import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; public class LogbackJdkCompatibility { public static void main(String[] args) { // 获取JDK版本 String javaVersion = System.getProperty("java.version"); int majorVersion = Runtime.version().feature(); // 初始化Logback LoggerContext context = new LoggerContext(); Logger logger = context.getLogger(LogbackJdkCompatibility.class); System.out.println("JDK 版本: " + javaVersion); System.out.println("Logback 版本: " + Logger.ROOT_LOGGER_NAME.getClass().getPackage().getImplementationVersion()); // 兼容性检查 if (majorVersion >= 8) { logger.info("✅ 兼容性检查通过"); // 测试实际日志功能 logger.debug("Debug 测试消息"); logger.info("Info 测试消息"); } else { logger.error("❌ 不兼容:Logback 1.4.x 需要 Java 8+"); } } } ``` ### 编译配置示例 (Maven) 确保 `pom.xml` 指定正确的 JDK 版本: ```xml <properties> <java.version>17</java.version> <!-- 推荐使用较新版本 --> <logback.version>1.4.12</logback.version> <!-- 最新稳定版 --> </properties> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <!-- 针对Java 9+模块化系统 --> <compilerArgs> <arg>--add-exports=java.base/sun.security.x509=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> </plugins> </build> ``` ### 关键说明 1. **Java 模块化系统支持**: - Logback 1.4.x 完全支持 JPMS (Java Platform Module System) - 在 `module-info.java` 中添加: ```java requires ch.qos.logback.classic; requires org.slf4j; ``` 2. **新特性依赖**: - 事件日志(event logging)等新功能需要 Java 8+ 的 Lambda 支持 - 在 JDK 17+ 中使用 `var` 关键字: ```java var logger = LoggerFactory.getLogger(MyClass.class); ``` 3. **不兼容表现**: - JDK 1.7 运行时会出现错误:`UnsupportedClassVersionError: ch/qos/logback/... : Unsupported major.minor version 52.0` - 数字 52 表示 Java 8 的 class 文件版本 > 💡 **推荐实践**:生产环境使用 **JDK 17 LTS** + **Logback 1.4.12**(截至2024年最新稳定版)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值