Java大师成长计划之第1天:Java编程基础入门
📢 友情提示:
本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。
欢迎来到“Java大师成长计划”系列文章的第一天!在接下来的日子里,我们将一起深入学习Java编程,逐步成长为一名Java大师。今天,我们将从Java的基础知识入手,了解Java的基本语法、数据类型、变量以及控制结构。这些内容是每一位Java开发者必须掌握的基础。
一、Java简介
Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年首次发布。它具有以下几个重要特性:
- 跨平台:Java的“编写一次,处处运行”(WORA)特性使其能够在不同操作系统上运行。
- 面向对象:Java是一种面向对象的编程语言,支持封装、继承和多态等特性。
- 强类型语言:Java是一种强类型语言,所有变量都必须声明类型。
二、Java的基本语法
Java 的基本语法是理解这门语言的基础,掌握这些语法规则对于编写高质量的 Java 代码至关重要。以下内容将详细介绍 Java 的语法结构,包括类的定义、方法的声明与调用、注释的使用、标识符和关键字,以及代码块的概念等。
1. 类的定义
在 Java 中,所有的代码都必须包含在类中。类是 Java 的基本构建块,用于创建对象。类的定义使用 class
关键字,其基本结构如下:
[修饰符] class 类名 {// 类的属性(字段)// 类的方法
}
示例:
public class Car {// 属性String color;String model;// 方法void displayInfo() {System.out.println("Model: " + model + ", Color: " + color);}
}
2. 方法的声明与调用
方法是执行特定任务的代码块。每个方法都有名称、返回类型和参数列表。方法的基本结构如下:
[修饰符] 返回类型 方法名(参数类型 参数名) {// 方法体return 返回值; // 如果返回类型不是void,必须有return语句
}
示例:
public class Calculator {// 方法:加法public int add(int a, int b) {return a + b;}public static void main(String[] args) {Calculator calc = new Calculator(); // 创建Calculator对象int result = calc.add(5, 3); // 调用add方法System.out.println("Result: " + result); // 输出结果}
}
3. 注释的使用
注释是代码中的说明文字,用于提高代码的可读性。Java 支持三种类型的注释:
-
单行注释:使用
//
开头,后面的内容被视为注释,直到行尾。// 这是一个单行注释 int x = 10; // 变量 x 的值为 10
-
多行注释:使用
/*
开头,*/
结束,可以跨越多行。/** 这是一个多行注释* 可以用于注释多个代码行*/
-
文档注释:使用
/**
开头,*/
结束,通常用于生成 API 文档。/*** 计算两个数的和* @param a 第一个数字* @param b 第二个数字* @return 两个数字的和*/ public int add(int a, int b) {return a + b; }
4. 标识符与关键字
4.1 标识符
标识符是 Java 中用于标识类、方法、变量和其他用户定义项的名称。标识符的命名规则如下:
- 标识符由字母、数字、下划线(_)或美元符号($)组成,不能以数字开头。
- 标识符不能使用 Java 的关键字(如
class
,public
,void
等)。 - 标识符区分大小写。
示例:
int myVariable; // 合法标识符
String $name; // 合法标识符
float 2ndValue; // 非法标识符,不能以数字开头
4.2 关键字
关键字是 Java 语言保留的单词,具有特定的含义。它们不能用作标识符。以下是一些常用的关键字:
- 访问修饰符:
public
,private
,protected
- 数据类型:
int
,double
,boolean
,char
,void
- 控制结构:
if
,else
,for
,while
,switch
- 其他:
class
,interface
,extends
,implements
,new
5. 代码块
代码块是由一对大括号 {}
包围的语句集合,用于将多条语句组织在一起。代码块可以出现在方法、类和控制结构中。
示例:
public class Example {void method() {// 这是一个方法体if (true) {// 这是一个代码块System.out.println("条件为真");}}
}
6. 语句与表达式
-
语句:语句是程序中的一行代码,完成一个特定的操作,通常以分号
;
结尾。例如:int a = 5; // 赋值语句
-
表达式:表达式是计算值的代码片段,可以是变量、常量或运算符的组合。例如:
int sum = a + 10; // a + 10是一个表达式
7. 常量与变量
在 Java 中,可以使用 final
关键字来定义常量。常量的值在定义后不能改变。变量则是可以改变值的存储单元。
示例:
final int MAX_VALUE = 100; // 常量
int currentValue = 50; // 变量
8. 输入与输出
Java 提供了多种方式来处理输入和输出,最常用的是通过 System.out
进行输出,通过 Scanner
类进行输入。
输出示例:
System.out.println("Hello, world!"); // 输出到控制台
输入示例:
import java.util.Scanner;public class InputExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数: ");int number = scanner.nextInt(); // 从控制台读取整数System.out.println("您输入的数字是: " + number);}
}
9. 格式化输出
在 Java 中,我们可以使用 System.out.printf
方法实现格式化输出,类似于 C 语言的 printf
函数。它允许我们指定输出的格式。
示例:
double pi = 3.14159;
System.out.printf("π的值是:%.2f%n", pi); // 输出:π的值是:3.14
10. 总结
通过以上学习,我们对 Java 的基本语法有了深入的了解。掌握了类的定义、方法的声明和调用、注释的使用、标识符与关键字、代码块、语句与表达式、常量与变量以及输入输出等内容。这些都是程序设计的基础,在后续的学习中,我们将逐步探索更高级的主题,如面向对象编程、异常处理、JavaCollections等。希望大家能在这个过程中不断实践与探索,早日成为Java大师!
三、数据类型
在 Java 中,数据类型用于定义变量可以存储何种类型的数据。数据类型的选择对于优化程序的性能和内存使用至关重要。Java 的数据类型主要分为两类:基本数据类型和引用数据类型。下面将详细介绍这两类数据类型的具体内容。
1、基本数据类型
基本数据类型是 Java 中最基本的类型,用于存储简单的值。Java 提供了 8 种基本数据类型,它们可以进一步划分为数字类型、字符类型和布尔类型。
【数字类型】
数字类型用于表示各种数值,可以分为整数类型和浮点数类型。
1.1 整数类型
-
byte:1 字节(8 位),用于存储较小的整数,范围:-128 到 127。
byte b = 100;
-
short:2 字节(16 位),用于存储中等大小的整数,范围:-32,768 到 32,767。
short s = 10000;
-
int:4 字节(32 位),是最常用的整数类型,范围:-2,147,483,648 到 2,147,483,647。
int i = 50000;
-
long:8 字节(64 位),用于存储较大的整数,范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。可以通过在数字后添加
L
或l
来表示 long 类型。long l = 15000000000L; // 使用 L 后缀
1.2 浮点数类型
-
float:4 字节(32 位),用于存储单精度浮点数,适合存储需要小数的数值。可以通过在数字后添加
F
或f
来表示 float 类型。float f = 5.75f; // 使用 f 后缀
-
double:8 字节(64 位),用于存储双精度浮点数,是默认的浮点数类型,适合存储更大范围的小数值。
double d = 19.99;
【字符类型】
-
char:2 字节(16 位),用于存储单个字符,使用 Unicode 编码表示字符,范围从
\u0000
到\uffff
。char c = 'A';
【布尔类型】
-
boolean:1 字节(虽然实际实现可能依赖于 JVM),用于表示真(true)或假(false),常用于条件判断。
boolean isJavaFun = true;
2、引用数据类型
引用数据类型用于存储对象的引用,而不是直接存储数据。引用数据类型包括类、接口和数组。
2.1. 类
类是 Java 中的基本构造块,用于创建对象。类定义了一组属性和行为。
public class Person {String name; // 属性int age; // 属性// 方法void displayInfo() {System.out.println("Name: " + name + ", Age: " + age);}
}// 创建对象
Person person = new Person();
person.name = "Alice";
person.age = 30;
person.displayInfo(); // 输出:Name: Alice, Age: 30
2.2. 接口
接口是一个抽象类型,定义了一组方法但不提供实现。类可以实现接口,从而具有接口定义的行为。
public interface Animal {void sound(); // 抽象方法
}public class Dog implements Animal {public void sound() {System.out.println("Woof");}
}// 创建对象
Animal myDog = new Dog();
myDog.sound(); // 输出:Woof
2.3. 数组
数组是存储多个相同类型数据的容器。数组的大小在创建时确定,不能改变。
int[] numbers = new int[5]; // 创建一个整型数组
numbers[0] = 10;
numbers[1] = 20;// 或者直接初始化数组
int[] numbers2 = {1, 2, 3, 4, 5};// 遍历数组
for (int n : numbers2) {System.out.println(n); // 输出:1 2 3 4 5
}
3、类型转换
在 Java 中,基本数据类型之间可以进行转换,分为隐式转换和显式转换。
3.1. 隐式转换
隐式转换(也称为自动类型转换)是指从一种数据类型转换为另一种数据类型时,系统会自动处理这种转换。例如,从 int
转换为 double
:
int intValue = 10;
double doubleValue = intValue; // 隐式转换
3.2. 显式转换
显式转换(也称为强制类型转换)是指需要通过强制类型转换符将一种类型转换为另一种类型,通常用于将更大范围的数据类型转换为更小范围的数据类型。例如:
double doubleValue = 9.78;
int intValue = (int) doubleValue; // 显式转换,结果为 9
4、总结
了解 Java 的数据类型对于有效地处理数据至关重要。基本数据类型提供了处理简单数据的能力,而引用数据类型则使得我们能够创建复杂的数据结构。掌握这些数据类型的使用与特性,将为后续的学习打下坚实的基础。在 Java 编程中,合理使用数据类型可以帮助我们提高程序的性能和可读性。随着我们逐步深入 Java 的其他特性,数据类型将成为我们编程的基石。
四、变量
在 Java 编程中,变量是用于存储数据的命名空间。它是一种可以改变的存储单元,可以在程序运行期间持有不同的值。理解变量的概念以及如何使用它们是学习 Java 的重要组成部分。本节将详细介绍变量的声明与初始化、变量的命名规则、作用域和生命周期、常量的使用以及变量的类型转换等内容。
1、变量的声明与初始化
在 Java 中,使用变量之前必须先声明它。变量的声明指定了变量的类型和名称。变量的初始化则是指给变量分配一个初始值。
1.1 变量的声明
变量的声明格式如下:
数据类型 变量名;
例如,声明一个整数变量 num
:
int num;
可以在声明时不直接赋值,这种情况下,变量将具有默认值(对于基本数据类型,int 的默认值是 0)。
1.2 变量的初始化
变量的初始化是给变量赋予初值的过程,格式如下:
变量名 = 值;
例如,将 num
初始化为 5:
num = 5;
我们也可以在声明时直接进行初始化:
int num = 5; // 声明并初始化变量
2、变量的命名规则
在 Java 中,变量名必须遵循一定的命名规则和约定,以确保代码的可读性和一致性。
2.1 命名规则
- 合法字符:变量名可以包含字母、数字、下划线(_)和美元符号($)。
- 首字符:变量名必须以字母、下划线或美元符号开头,不能以数字开头。
- 区分大小写:Java 是区分大小写的,变量名
myVariable
和myvariable
是两个不同的变量。 - 关键字:变量名不能使用 Java 的关键字(如
int
,class
,public
等)。
2.2 命名约定
虽然 Java 对变量名的命名没有强制要求,但有一些命名约定有助于提高代码的可读性:
- 驼峰命名法:变量名的第一个单词小写,后续单词首字母大写,例如:
myVariableName
。 - 意义明确:变量名应具有描述性,能够清晰表达该变量的用途,例如:
studentAge
代表学生的年龄。 - 避免使用不必要的缩写:尽量避免使用不明确的缩写,以便其他开发者能够轻松理解代码。
3、变量的作用域和生命周期
变量的作用域是指变量在代码中可见和有效的范围。Java 中的变量作用域可以分为以下几类:
3.1 局部变量
局部变量是在方法、构造函数或块中声明的变量。局部变量的作用域仅限于声明它们的代码块。在代码执行结束后,局部变量会被销毁。
public class Example {public void myMethod() {int localVar = 10; // 局部变量System.out.println(localVar);}
}
3.2 实例变量
实例变量是在类中声明的变量,但不在任何方法中。实例变量的作用域是整个类,可以在类的任何方法中访问。每个对象都有自己独立的实例变量。
public class Person {String name; // 实例变量public Person(String name) {this.name = name; // 使用构造函数初始化实例变量}public void displayName() {System.out.println("Name: " + name);}
}
3.3 静态变量
静态变量是使用 static
关键字声明的变量。静态变量的作用域是整个类,可以通过类名直接访问,而不需要创建类的实例。静态变量在类的所有对象间共享。
public class Counter {static int count = 0; // 静态变量public Counter() {count++; // 每创建一个对象,count 增加 1}public static void displayCount() {System.out.println("Count: " + count);}
}
4、常量的使用
常量是一个在程序运行期间值不变的变量。在 Java 中,可以使用 final
关键字来定义常量。常量通常使用全大写字母命名,以便与变量区分开。
final int MAX_SPEED = 120; // 定义一个常量
常量一旦被赋值,就不能再修改:
MAX_SPEED = 150; // 编译错误,不能修改常量的值
5、变量的类型转换
在 Java 中,变量的类型转换分为隐式转换和显式转换。
5.1 隐式转换
隐式转换(自动类型转换)是在赋值或运算时,较小的数据类型自动转换为较大的数据类型。例如:
int intValue = 100;
double doubleValue = intValue; // 隐式转换,int 转换为 double
5.2 显式转换
显式转换(强制类型转换)是指将较大类型的数据强制转换为较小类型的数据,通常使用括号来进行转换。例如:
double doubleValue = 9.78;
int intValue = (int) doubleValue; // 显式转换,结果为 9
6、总结
变量是 Java 编程的基本组成部分,理解变量的声明、初始化、命名规则、作用域、常量以及类型转换是编写高效代码的基础。在实际开发中,合理使用变量可以提高代码的可读性和可维护性。掌握这些知识后,您将能够更好地管理程序中的数据,并为学习更复杂的概念打下基础。在接下来的学习中,我们将继续深入 Java 的其他特性,如控制结构、面向对象编程等。
五、控制结构
在 Java 编程中,控制结构用于控制程序的执行流程。控制结构允许开发者根据条件执行不同的代码块,或者重复执行特定的操作。Java 提供了多种控制结构,包括条件语句和循环语句。理解这些控制结构的工作原理以及如何使用它们是编写逻辑清晰、功能强大的程序的基础。以下将详细介绍 Java 中的控制结构。
1、条件语句
条件语句用于基于给定条件的真值来选择执行的代码块。主要的条件语句包括 if
语句、if-else
语句、switch
语句等。
1.1 if 语句
if
语句用于根据布尔条件执行单个代码块。如果条件为真,则执行相应的代码块。基本语法:
if (条件) {// 当条件为真时执行的代码
}
示例:
int score = 85;
if (score >= 60) {System.out.println("你通过了考试!");
}
1.2 if-else 语句
if-else
语句用于在条件为真或假时执行不同的代码块。基本语法:
if (条件) {// 当条件为真时执行的代码
} else {// 当条件为假时执行的代码
}
示例:
int score = 55;
if (score >= 60) {System.out.println("你通过了考试!");
} else {System.out.println("你没有通过考试。");
}
1.3 else if 语句
else if
语句用于多个条件的判断。可以有任意数量的 else if
语句来检查多个条件。基本语法:
if (条件1) {// 当条件1为真时执行的代码
} else if (条件2) {// 当条件2为真时执行的代码
} else {// 所有条件都不为真时执行的代码
}
示例:
int score = 75;
if (score >= 90) {System.out.println("优秀");
} else if (score >= 75) {System.out.println("良好");
} else if (score >= 60) {System.out.println("及格");
} else {System.out.println("不及格");
}
1.4 switch 语句
switch
语句用于根据某个变量的值选择执行不同的代码块。它通常用于处理多个条件的情况,尤其是当这些条件是基于同一个变量的多个值时。基本语法:
switch (变量) {case 值1:// 当变量等于值1时执行break;case 值2:// 当变量等于值2时执行break;default:// 如果没有匹配到任何值,执行这里的代码
}
示例:
char grade = 'B';
switch (grade) {case 'A':System.out.println("优秀");break;case 'B':System.out.println("良好");break;case 'C':System.out.println("及格");break;default:System.out.println("不及格");break;
}
2、循环语句
循环语句用于重复执行一段代码,直到满足特定条件。Java 提供了几种类型的循环,包括 for
循环、while
循环和 do-while
循环。
2.1 for 循环
for
循环用于在特定次数内重复执行代码块。它通常用于需要明确迭代次数的情况。基本语法:
for (初始化; 条件; 更新) {// 循环体
}
示例:
for (int i = 1; i <= 5; i++) {System.out.println("第 " + i + " 次循环");
}
2.2 while 循环
while
循环在给定条件为真时重复执行代码块。它适用于在循环开始前不确定迭代次数的情况。基本语法:
while (条件) {// 循环体
}
示例:
int count = 1;
while (count <= 5) {System.out.println("第 " + count + " 次循环");count++;
}
2.3 do-while 循环
do-while
循环与 while
循环类似,但它至少执行一次循环体,因为条件是在循环体执行后检查的。基本语法:
do {// 循环体
} while (条件);
示例:
int count = 1;
do {System.out.println("第 " + count + " 次循环");count++;
} while (count <= 5);
3、控制循环的语句
在循环中,有时需要提前跳出循环或者跳过当前迭代。Java 提供了 break
和 continue
关键字来实现这些功能。
3.1 break 语句
break
语句用于提前终止循环或 switch
语句。示例:
for (int i = 1; i <= 10; i++) {if (i == 6) {break; // 当 i 为 6 时,终止循环}System.out.println("第 " + i + " 次循环");
}
3.2 continue 语句
continue
语句用于跳过当前循环的剩余部分,并立即开始下一次循环迭代。示例:
for (int i = 1; i <= 10; i++) {if (i == 6) {continue; // 当 i 为 6 时,跳过本次循环}System.out.println("第 " + i + " 次循环");
}
4、嵌套控制结构
在 Java 中,可以将控制结构嵌套在其他控制结构中。例如,可以在 if
语句中使用 for
循环,也可以在 for
循环中使用 while
循环。示例:
for (int i = 1; i <= 3; i++) {System.out.println("外层循环 " + i);for (int j = 1; j <= 2; j++) {System.out.println(" 内层循环 " + j);}
}
5、总结
控制结构是 Java 编程中实现逻辑决策与循环执行的关键组成部分。通过条件语句(if
、switch
)和循环语句(for
、while
、do-while
),程序员可以根据不同的输入和条件控制程序的流向。掌握这些控制结构将极大提高代码的灵活性和可读性。在后续的学习中,我们将会结合控制结构与其他 Java 特性,例如数组和对象,进一步构建更复杂的逻辑和功能。
六、示例:结合变量与控制结构
在本节中,我们将通过一个具体示例来演示如何结合变量与控制结构,以实现一个实际应用程序。我们将创建一个简单的程序,该程序将根据用户输入的分数,评估学生的成绩并输出相应的评价。同时,我们还将使用循环来处理多个学生的评分。
1、程序需求
程序需要完成以下功能:
- 提示用户输入学生的分数。
- 根据分数输出相应的成绩等级:
- 90 分及以上:优秀
- 75 分至 89 分:良好
- 60 分至 74 分:及格
- 60 分以下:不及格
- 用户可以选择继续输入下一个学生的分数,直到选择退出。
2、编码实现
以下是实现上述需求的 Java 程序示例:
import java.util.Scanner;public class GradeEvaluation {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String continueInput; // 变量用于控制是否继续输入分数do {System.out.print("请输入学生的分数(0-100):");int score = scanner.nextInt(); // 声明并初始化分数变量// 评分等级判断if (score < 0 || score > 100) {System.out.println("输入无效,请输入 0 到 100 之间的分数。");} else if (score >= 90) {System.out.println("成绩等级:优秀");} else if (score >= 75) {System.out.println("成绩等级:良好");} else if (score >= 60) {System.out.println("成绩等级:及格");} else {System.out.println("成绩等级:不及格");}// 询问用户是否继续输入System.out.print("是否继续输入?(y/n):");continueInput = scanner.next(); // 用户输入} while (continueInput.equalsIgnoreCase("y")); // 忽略大小写进行比较System.out.println("感谢使用成绩评估系统!");scanner.close(); // 关闭 Scanner 对象}
}
3、代码解析
1. 导入 Scanner 类
import java.util.Scanner;
我们使用 Scanner
类来获取用户的输入。通过导入 java.util.Scanner
,我们可以在程序中创建一个 Scanner
对象,以便从控制台读取数据。
2. 主方法和变量声明
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String continueInput; // 变量用于控制是否继续输入分数
在 main
方法中,我们创建了一个 Scanner
对象 scanner
,用于读取用户输入。我们还声明了一个 String
类型的变量 continueInput
,用于存储用户是否继续输入的选择。
3. do-while 循环
do {// ...
} while (continueInput.equalsIgnoreCase("y"));
使用 do-while
循环可以确保程序至少执行一次,并在用户选择继续输入时重复执行。循环体内包含了获取分数和输出成绩等级的逻辑。
4. 获取分数并判断等级
System.out.print("请输入学生的分数(0-100):");
int score = scanner.nextInt(); // 声明并初始化分数变量// 评分等级判断
if (score < 0 || score > 100) {System.out.println("输入无效,请输入 0 到 100 之间的分数。");
} else if (score >= 90) {System.out.println("成绩等级:优秀");
} else if (score >= 75) {System.out.println("成绩等级:良好");
} else if (score >= 60) {System.out.println("成绩等级:及格");
} else {System.out.println("成绩等级:不及格");
}
程序提示用户输入分数,并将输入的分数存储在变量 score
中。通过一系列的 if-else if
语句,根据用户输入的分数判断并输出对应的成绩等级。此外,我们还添加了对无效输入的处理,确保用户输入的分数在合理范围内。
5. 继续输入的提示
System.out.print("是否继续输入?(y/n):");
continueInput = scanner.next(); // 用户输入
用户输入 y
或 n
来决定是否继续输入。如果输入 y
(不区分大小写),程序将再次提示输入分数。
6. 结束语和资源管理
System.out.println("感谢使用成绩评估系统!");
scanner.close(); // 关闭 Scanner 对象
在程序结束时,我们输出一条感谢消息,并关闭 Scanner
对象以释放资源。
4、运行实例
假设用户的输入过程如下:
请输入学生的分数(0-100):85
成绩等级:良好
是否继续输入?(y/n):y
请输入学生的分数(0-100):45
成绩等级:不及格
是否继续输入?(y/n):n
感谢使用成绩评估系统!
5、总结
通过这个示例,我们展示了如何结合使用变量与控制结构,以实现一个简单的成绩评估系统。程序中使用了变量来存储用户的输入,以及条件语句对输入进行判断处理。此外,利用循环结构允许用户多次输入分数,从而提高了程序的灵活性和实用性。掌握这种结合使用的方式,将为开发更复杂的应用程序打下基础。在后续的学习中,您可以尝试扩展该程序,例如增加更多的功能,处理不同类型的输入等。
七、总结
今天我们学习了Java编程的基础知识,包括基本语法、数据类型、变量与控制结构。这些概念是编写Java程序的基石。掌握这些基础知识后,您将能够编写更复杂的Java程序。
相关文章:
Java大师成长计划之第1天:Java编程基础入门
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 欢迎来到“Java大师成长计划”系列文…...
Java线程中断机制详解
中断机制是Java中一种协作式的线程停止方式,它提供了一种优雅的线程间通信机制,用于请求另一个线程停止当前工作。 中断机制的核心概念 中断标志位(Interrupt Status) 每个线程都有一个boolean类型的中断状态标志(native方法控制)…...
gem5-gpu教程06 回归测试
gem5-gpu包括gem5风格的回归测试,以避免常见错误,并在变更集之间保持模拟系统性能的一致性。如果你想为gem5-gpu做出贡献,你必须确保你的更改通过了包含的回归测试。 回归测试是一种软件测试类型,其主要目的是确保新代码的更改没有对现有功能造成影响。在软件开发过程中,当…...
查询Hologres或postgresql中的数据
因Hologres使用postgresql的语法.所以两者查询一样. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一个使用简单连接池管理PostgreSQL连接的工具类。*/ publi…...
C# 文件读取
文件读取是指使用 C# 程序从计算机文件系统中获取文件内容的过程。将存储在磁盘上的文件内容加载到内存中,供程序处理。主要类型有:文本文件读取(如 .txt, .csv, .json, .xml);二进制文件读取(如 .jpg, .pn…...
On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其一CLT与LLM知识推理
这个学习笔记,是在精读Anthropic的博客 On the Biology of a Large Language Model 的过程中留下的笔记。 由于原文非常长,我会分2-3 个博客来写。 作者的思路 作者对常用的LLM特征解读工具 SAE/Transcoder 进行了优化,增加了跨层连接的能力…...
Postman忘记密码访问官网总是无响应
1.Header Editor插件下载 百度网盘下载: 链接:https://pan.baidu.com/s/1EV6cY7TYQVgPjip3v-vhfQ 提取码:yyds 2.插件配置 下载规则url:https://azurezeng.github.io/static/HE-GoogleRedirect.json 、U(向上)、L(向左)和 R(向右)组成的 48 字符描…...
深度学习中的黑暗角落:梯度消失与梯度爆炸问题解析
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4o-mini模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
【数字图像处理】机器视觉(1)
判别相对应的点 1. 图像灰度化 2. 局部特征 3. 仿射不变性特征 图像变化的类型 【1】几何变化:旋转、相似(旋转 各向相同的尺度缩放)、仿射(非各向相同的尺度缩放) 【2】灰度变化:仿射灰度变化 角点 角…...
# 构建和训练一个简单的CBOW词嵌入模型
构建和训练一个简单的CBOW词嵌入模型 在自然语言处理(NLP)领域,词嵌入是一种将词汇映射到连续向量空间的技术,这些向量能够捕捉词汇之间的语义关系。在这篇文章中,我们将构建和训练一个简单的Continuous Bag of Words…...
Ubuntu20.04下GraspNet复现流程中的问题
pytorchcudacudnn的版本问题相对于GraspNet来说至关重要!!!至关重要!!!至关重要!!!(重要的事情说三边) 我的显卡是3070 那么首先说结论 使用30系…...
【ROS2】机器人操作系统安装到Ubuntu简介
主要参考: https://book.guyuehome.com/ROS2/1.系统架构/1.3_ROS2安装方法/ 官方文档:https://docs.ros.org/en/humble/Installation.html 虚拟机与ubuntu系统安装 略,见参考文档 ubutun换国内源,略 1. 设置本地语言 确保您有…...
从0到1掌握机器学习核心概念:用Python亲手构建你的第一个AI模型(超多代码+可视化)
🧠 一、开始 真正动手实现一个完整的AI项目!从数据预处理、特征工程、模型训练,到评估与调优,一步步还原你在动画视频中看到的所有核心知识点。 📦 二、环境准备 建议使用 Python 3.8,推荐工具࿱…...
Java面试题汇总
1王二哥 https://javabetter.cn/sidebar/sanfene/redis.html#_10-redis-%E6%8C%81%E4%B9%85%E5%8C%96%E6%96%B9%E5%BC%8F%E6%9C%89%E5%93%AA%E4%BA%9B-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB 2.小林 https://www.xiaolincoding.com/redis/data_struct/command.html#…...
Ollama API 应用指南
1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST(主要)、GET(部分接口) 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…...
React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案
一条“Hydration failed”的错误,让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用,一切顺利,直到打开了 SSR(服务端渲染),突然看到这个令人头皮发麻的报错: …...
【论文精读】Reformer:高效Transformer如何突破长序列处理瓶颈?
目录 一、引言:当Transformer遇到长序列瓶颈二、核心技术解析:从暴力计算到智能优化1. 局部敏感哈希注意力(LSH Attention):用“聚类筛选”替代“全量计算”关键步骤:数学优化: 2. 可逆残差网络…...
iOS18 MSSBrowse闪退
iOS18 MSSBrowse闪退 问题方案结果 问题 最近升级了电脑系统(15.4.1),并且也升级了xcode(16.3)开发工具。之后打包公司很早之前开发的项目。 上线之后发现在苹果手机系统18以上,出现了闪退问题。 涉及到的是第三方MSSBrowse,在选择图片放大的…...
create_function()漏洞利用
什么是 create_function() create_function() 是 PHP 早期提供的一个用来创建匿名函数的函数: $func create_function($a,$b, return $a $b;); echo $func(1, 2); // 输出 3 第一个参数是函数的参数列表(字符串形式),第二个参…...
leetcode-数组
数组 31. 下一个排列 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大…...
Tailwind CSS 实战:基于 Kooboo 构建个人博客页面
在现代 web 开发中,Tailwind CSS 作为一款实用优先的 CSS 框架,能让开发者迅速搭建出具有良好视觉效果的页面;Kooboo 则是一个强大的快速开发平台,提供了便捷的页面管理和数据处理功能。本文将详细介绍如何结合 Tailwind CSS 和 K…...
C#学习1_认识项目/程序结构
一、C#项目文件的构成 1.新建一个项目 2.运行项目 3.认识文件 1)解决方案(Solution):组织多个项目的容器 抽象理解:餐厅 解决方案.sln文件,点击即可进入VS编辑 2)项目(…...
边缘计算在工业自动化中的应用:开启智能制造新时代
在工业4.0的浪潮中,智能制造成为推动工业发展的核心驱动力。随着物联网(IoT)技术的广泛应用,工业设备之间的互联互通变得越来越紧密,但这也带来了数据处理和传输的挑战。边缘计算作为一种新兴技术,通过将计…...
《MySQL:MySQL表的内外连接》
表的连接分为内连接和外连接。 内连接 内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选,之前的文章中所用的查询都是内连接,也是开发中使用的最多的连接查询。 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件࿱…...
人工智能催化民航业变革:五大应用案例
航空业正在经历一场前所未有的技术革命,人工智能正成为变革的主要催化剂。从停机坪到航站楼,从维修机库到客户服务中心,人工智能正在从根本上重塑航空公司的运营和服务方式。这种转变并非仅仅停留在理论上——全球主要航空公司已从人工智能投…...
机器视觉中有哪些常见的光学辅助元件及其作用?
在机器视觉领域,光学元件如透镜、反射镜和棱镜扮演着至关重要的角色。它们不仅是高精度图像捕获的基础,也是提升机器视觉系统性能的关键。深入了解这些光学元件的功能和应用,可以帮助我们更好地掌握机器视觉技术的精髓。 透镜:精…...
Stream API 对两个 List 进行去重操作
在 Java 8 及以上版本中,可以使用 Lambda 表达式和 Stream API 对两个 List 进行去重操作。以下是几种常见的去重场景及对应的 Lambda 表达式实现方式: 1. 合并两个 List 并去重 List<String> list1 Arrays.asList("A", "B"…...
lerna 8.x 详细教程
全局安装 lerna npm install lerna -g初始化项目 mkdir lerna-cli-do cd lerna-cli-do npm init -y初始化项目 lerna init --packages="packages/*"lerna create 创建子项目 lerna create core lerna create util...
ROS第十二梯:ros-noetic和Anaconda联合使用
1) 概述 ros-noetic默认Python版本是Python2.7,但在使用过程中,通常需要明确调用python3进行编译。 Anaconda: 支持创建独立的python2/3环境,避免系统库冲突; 方便安装ROS依赖的科学计算库(如Numpy,Pandas)和机器学习框架; 核心目标:在anaconda环…...
网络原理 - 5(TCP - 2 - 三次握手与四次挥手)
目录 3. 连接管理 建立连接 - 三次挥手 三次握手的意义 断开连接 - 四次挥手 握手和挥手的相似和不同之处 连接管理过程中涉及到的 TCP 状态转换 完! 3. 连接管理 连接管理分为建立连接 和 断开连接~(important 重点!) 建…...
【开源】STM32HAL库移植Arduino OneWire库驱动DS18B20和MAX31850
项目开源链接 github主页https://github.com/snqx-lqh本项目github地址https://github.com/snqx-lqh/STM32F103C8T6HalDemo作者 VXQinghua-Li7 📖 欢迎交流 如果开源的代码对你有帮助,希望可以帮我点个赞👍和收藏 项目说明 最近在做一个项目…...
【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性
在Maven项目中,POM (Project Object Model) 文件是核心配置文件,而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置,并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…...
DC-2寻找Flag1、2、3、4、5,wpscan爆破、git提权
一、信息收集 1、主机探测 arp-scan -l 探测同网段2、端口扫描 nmap -sS -sV 192.168.66.136 80/tcp open http Apache httpd 2.4.10 ((Debian)) 7744/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u7 (protocol 2.0)这里是扫描出来两个端口,80和ssh&…...
数据结构手撕--【栈和队列】
目录 1、栈 2、队列 1、栈 先进后出(都在栈顶进行操作) 使用数组结构比使用链式结构更优,因为数组在尾上插入数据的代价更小。并且采用动态长度的数组来表示。 定义结构体 #include <stdio.h> #include <stdlib.h> #include &l…...
八大排序——选择排序/堆排序
八大排序——选择排序/堆排序 目录 一、选择排序 二、堆排序 2.1 大顶堆(升序) 2.1.1 步骤 2.1.2 代码实现 2.2 小顶堆(降序) 一、选择排序 每一趟从待排序序列中找到其最小值,然后和待排序序列的第一个值进行交换&am…...
【KWDB 创作者计划】_深度学习篇---归一化反归一化
文章目录 前言一、归一化(Normalization)1. 定义2. 常用方法Min-Max归一化Z-Score标准化(虽常称“标准化”,但广义属归一化)小数缩放(Decimal Scaling)3. 作用4. 注意事项二、反归一化(Denormalization)1. 定义2.方法3. 应用场景三、Python示例演示四、归一化 vs. 标准…...
windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页
背景 对于一些只能在ubuntu上运行的脚本,并且这个脚本会在ubuntu上通过网页展示运行结果。我们希望可以使用windows远程操控ubuntu,在windows上查看网页内容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…...
推荐系统(二十四):Embedding层的参数是如何在模型训练过程中学习的?
近来有不少读者私信我关于嵌入层(Embedding层)参数在模型训练过程中如何学习的问题。虽然之前已经在不少文章介绍过 Embedding,但是为了读者更好地理解,笔者将通过本文详细解读嵌入层(Embedding Layer)的参…...
【Ubuntu】关于系统分区、挂载点、安装位置的一些基本信息
在ubuntu22及以前的版本中,最好是手动配置分区及其挂载点,通常我们会配置成3/4个分区: 引导区,交换区,根挂载点,home挂载点(有时根挂载点和home合二为一) 配置各种环境所占用的内存 …...
概率dp总结
概率 DP 用于解决概率问题与期望问题,建议先对 概率 & 期望 的内容有一定了解。一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高斯消元 来优…...
深入解析:RocketMQ、RabbitMQ和Kafka的区别与使用场景
互联网大厂Java求职者面试:RocketMQ、RabbitMQ和Kafka的深入解析 故事场景:严肃且专业的面试官与架构师程序员马架构 在一家知名的互联网大厂,Java求职者正在接受一场严格的面试。面试官是一位经验丰富的技术专家,他将通过多轮提…...
探秘Transformer系列之(30)--- 投机解码
探秘Transformer系列之(30)— 投机解码 文章目录 探秘Transformer系列之(30)--- 投机解码0x00 概述0x01 背景1.1 问题1.2 自回归解码 0x02 定义 & 历史2.1 投机解码2.2 发展历史 0x03 Blockwise Parallel Decoding3.1 动机3.2…...
【CSS】层叠,优先级与继承(三):超详细继承知识点
目录 继承一、什么是继承?2.1 祖先元素2.2 默认继承/默认不继承 二、可继承属性2.1 字体相关属性2.2 文本相关属性2.3 列表相关属性 三、不可继承属性3.1 盒模型相关属性3.2 背景相关属性 四、属性初始值4.1 根元素4.2 属性的初始值4.3 得出结论 五、强制继承5.1 in…...
SpringBoot中6种自定义starter开发方法
在SpringBoot生态中,starter是一种特殊的依赖,它能够自动装配相关组件,简化项目配置。 自定义starter的核心价值在于: • 封装复杂的配置逻辑,实现开箱即用 • 统一技术组件的使用规范,避免"轮子"泛滥 • 提高开发效率,减少重复代码 方法一:基础配置类方式 …...
时间自动填写——电子表格公式的遗憾(DeepSeek)
now()/today()缘源来,人肉值粘胜无依。用函数抓取系统时间,人肉CTRLC“永葆青春”——直接时间数据存储。 笔记模板由python脚本于2025-04-23 23:21:44创建,本篇笔记适合想要研究电子表格日期自动填写的coder翻阅。 【学习的细节是欢悦的历程…...
AUTODL关闭了程序内存依然占满怎么办
AutoDL帮助文档 关闭了程序,使用nvidia-smi查看,内存任然爆满: 执行 ps -ef | grep train | awk {print $2} | xargs kill -9...
Spark集群搭建之Yarn模式
1.把spark安装包复制到你存放安装包的目录下,例如我的是/opt/software cd /opt/software,进入到你存放安装包的目录 然后tar -zxvf 你的spark安装包的完整名字 -C /opt/module,进行解压。例如我的spark完整名字是spark-3.1.1-bin-hadoop3.2.…...
CSS-跟随图片变化的背景色
CSS-跟随图片变化的背景色 获取图片的主要颜色并用于背景渐变需要安装依赖 colorthief获取图片的主要颜色. 并丢给背景注意 getPalette并不是个异步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…...
一,开发环境安装
环境安装选择的版本如下 Python3.7 Anaconda5.3.1 CUDA 10.0 Pycharm Anaconda安装:下载地址 CUDA 10.0安装,包下载地址...