1 Java环境搭建

1.1 安装jdk配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装jdk
#
是否需要再选择安装一个额外的JRE。
这是可选的,因为之前安装的JDK中,已经包含了开发环境和JRE运行环境两部分,所以不必再安装一个JRE。



### 配置环境变量
# 1 新建 JAVA_HOME
JAVA_HOME D:\Program Files\Java\jdk-1.8

# 2 新建 CLASSPATH【第一个是. 表示当前路径】
CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

# 3 path 加入两个环境变量
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

1.2 第一个helloworld

1
2
3
4
5
6
7
8
9
10
11
#1 打开记事本,写入如下代码,命名为HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello world");
}
}

#2 编译代码 生成字节码文件 HelloWorld.class
javac HelloWorld.java
# 3 执行字节码文件
java HelloWorld

1.2 编辑器

1
2
3
4
5
6
7
# 1 Eclipse  https://www.eclipse.org/downloads/
Eclipse是一个免费的开源Java IDE,提供了丰富的功能和插件扩展。它支持Java应用程序、Web应用程序和企业级应用程序的开发,并具有强大的代码编辑、调试和测试工具。
# 2 My Eclipse https://www.genuitec.com/products/myeclipse/
MyEclipse是一个专为Java开发而设计的集成开发环境(IDE),它是Eclipse IDE的一个商业化版本。MyEclipse提供了许多功能和工具,旨在提高Java开发人员的生产力和效率

# 3 IntelliJ IDEA:https://www.jetbrains.com/idea/download/other.html
IntelliJ IDEA是一种商业化的Java IDE,也有免费的社区版可用。它提供了智能代码完成、代码检查和重构等功能,支持Java开发以及其他相关技术,如Spring和Hibernate,同属于Jetbrains系列,使用习惯跟Pycharm类似,我们选择此编辑器

1.2.1 安装-破解

1
2
3
4
5
6
# 1 把下载的安装包,一路下一步安装到电脑上
# 2 使用破解工具,双击运行(win)
jihuo-tooll-2023.1\jetbra\scripts\install-current-user.vbs
# 3 填入激活码
jihuo-tooll-2023.1\激活码.txt
# 4 顺利激活

image-20240517155744224

1.2.2 新建项目

image-20240517155756350

image-20240517155805078

image-20240517155820571

image-20240517155827271

2 Java语法快速入门

2.1 程序的入口

1
2
3
4
# java程序入口为类中的static的viod的main函数,参数固定为字符串数组
public static void main(String[] args) {
System.out.println("hello world");
}

2.2 文件名

1
2
3
# 一个文件中最多只能有一个public类 且 【文件名】必须和【public类名一致】
# 文件中可以有多个类,但是文件名与public类名一致,其它类不能用public修饰
# 如果文件中有多个类 且 无public类,文件名可以是任意类名
1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
public static void main(String[] args){
System.out.println("hello world");
Demo.add(3,4);
}
}

class Demo{
public static void add(int a,int b){
System.out.println(a+b);
}
}

2.3 类规范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
###1 类名规范
类名首字母大写且驼峰式命名
例如:Hello、UserInfo、PersonApplication

### 2 类修饰符(写在类前面的修饰符)
public、default(不写)

### 3 类中成员(变量,方法)修饰符:
public、private、protected、default(不写)
-public:公有的,所有其他类中都可以使用
-private:私有的,只有在当前类中可以使用
-protected:受保护的,只有在当前包下的类中可以使用
-default(不写):默认

### 4 静态成员方法(static修饰)
无序实例化就可以指定调用

### 5 void表示方法没有返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Main {
public static String name = "彭于晏";

public static void main(String[] args) {
// 1 调用其他类的静态方法---》类似于python中的类方法
Demo.add(3, 4);
// 2 调用类自己的静态成员变量
System.out.println(name);
// 3 调用其他类公开的成员变量
System.out.println(Demo.age);
// 4 调用其他类的对象方法,必须实例化才能调用
Demo d = new Demo();
d.test();
}
}

class Demo {
private static String name = "张三"; // 私有变量,只能当前类中使用
public static int age = 19; // 公有变量,所有类都可以使用

public static void add(int a, int b) {
System.out.println(a + b);
System.out.println(name);
}

public void test() {
System.out.println("我是test");
}
}

3 基本语法

3.1 注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 1 单行注释
以双斜杠“//”标识,只能注释一行内容,用在注释信息内容少的地方
快捷键:【注释 ctrl+/ 】 【 取消注释 ctrl+/ 】

### 2 多行注释
包含在“/*”和“*/”之间,能注释很多行的内容,可以换行
快捷键:【注释 ctrl+shift+/ 】 【取消注释 ctrl+shift+\ 】

### 3 文档注释
包含在“/**”和“*/”之间,也能注释多行内容,一般用在类、方法和变量上面,用来描述其作用。注释后,鼠标放在类和变量上面会自动显示出我们注释的内容
/**
*
* @param a
* @param b
*/
public static void add(int a, int b) {
System.out.println(a + b);
System.out.println(name);
}

3.2 变量和常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 变量
String name="彭于晏";
name = "李易峰";

int age = 19;
age = 20;
System.out.println(name);
System.out.println(age);

// 常量
final String hobby="足球";
hobby="篮球" // 不允许修改
System.out.println(hobby);

// final 修饰方法
父类中的 final 方法可以被子类继承,但是不能被子类重写。
声明 final 方法的主要目的是防止该方法的内容被修改


//final 修饰类
final 类不能被继承,没有类能够继承 final 类的任何特性

3.3 输入输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 输出
System.out.println("hello");
System.out.print("world");
System.out.printf("变量值是:%s%n",name);

// 输入(一般不用)
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
System.out.print("请输入您的名字:");
Scanner input = new Scanner(System.in);
String InputName = input.nextLine();
System.out.printf("您输入的名字是:%s",InputName);
}
}

image-20240517155845840

3.4 条件语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Demo02 {
public static void main(String[] args) {
System.out.println("请输入您的分数:");
Scanner scanner = new Scanner(System.in);
int score = Integer.valueOf(scanner.nextLine()); // 强制类型转换为int

if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 70 && score < 90) {
System.out.println("良好");
} else if (score >= 60 && score < 70) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Demo02 {
public static void main(String[] args) {
System.out.println("请输入您的分数:");
Scanner scanner = new Scanner(System.in);
int score = Integer.valueOf(scanner.nextLine()); // 强制类型转换为int
switch (score){
case 99:
System.out.println("恭喜您99分");
break;
case 88:
System.out.println("恭喜您88分");
break;
default:
System.out.println("不知道多少分");

}
}
}

3.5 循环语句

while循环

1
2
3
4
5
6
7
8
9
10
// 打印0--9
public class Demo03 {
public static void main(String[] args) {
int count = 0;
while (count < 10) {
System.out.println(count);
count += 1;
}
}
}

do while循环(至少执行1次)

1
2
3
4
5
6
7
8
9
10
public class Demo03 {
public static void main(String[] args) {
int count = 0;
do{
System.out.println(count);
count++;

}while (count<10);
}
}

for循环

1
2
3
4
5
6
7
public class Demo03 {
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.println(i);
}
}
}
1
2
3
4
5
6
7
8
9
// 循环数组
public class Demo03 {
public static void main(String[] args) {
String[] nameList = {"李易峰", "刘亦菲", "彭于晏", "古天乐"};
for(int i=0;i<nameList.length;i++){
System.out.println(nameList[i]);
}
}
}

break/continue跟其他语言同理

4 数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 字节类型  byte
# 整数类型:
byte 带符号字节型 8位 -128 ~ 127
short 带符号字节型 16位 -32768 ~ 32767
int 带符号字节型 32位 -231 -2147483648 ~ 2147483647
long 带符号字节型 64位 -263 -9223372036854775808 ~ 9223372036854775807
# 小数类型:浮点型
float
double

# 字符类型 char
# 字符串类型 String
# 数组类型 int[] String[] ...
# 布尔类型 bloon

4.1 字节类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// byte,字节		  【1字节】表示范围:-128 ~ 127 即:`-2^7 ~ 2^7 -1  `  

// 单纯的字节类型,一般就是用来表示数字



public class Demo04 {
public static void main(String[] args) {
byte b='A';
System.out.println(b); // 10 进制显示
System.out.println(Integer.toBinaryString(b)); // 2进制显示
System.out.println(Integer.toHexString(b)); // 16进制显示

byte a=98;
System.out.println(a); // 98
System.out.println(Integer.toBinaryString(a)); //2进制显示
System.out.println(Integer.toHexString(a)); // 16进制显示
}
}

// 注意:两个字节相加得到的是int类型,除非强制类型转换成byte类型
byte b=65;
byte a=66;
int c=a+b;
byte d=(byte)(a+b); // 因为有可能加超过byte的范围
System.out.println(c);
System.out.println(d);

// ascii对应关系

python中字符串与字节

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
##### python中字符串与字节
v1 = '彭于晏'
v2 = v1.encode('utf-8')
print(v2) # b'\xe5\xbd\xad\xe4\xba\x8e\xe6\x99\x8f' 16进制表示
v3 = v1.encode('GBK')
print(v3) # b'\xc5\xed\xd3\xda\xea\xcc' 16进制表示

# 转换为10进制
v3 = [item for item in v2]
print(v3) # [229, 189, 173, 228, 186, 142, 230, 153, 143]

# 转换为二进制
v4 = [bin(item) for item in v2]
print(v4) # ['0b11100101', '0b10111101', '0b10101101', '0b11100100', '0b10111010', '0b10001110', '0b11100110', '0b10011001', '0b10001111']

# 转换为16进制
v5 = [hex(item) for item in v2]
print(v5) # ['0xe5', '0xbd', '0xad', '0xe4', '0xba', '0x8e', '0xe6', '0x99', '0x8f']

java中字符串与字节数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Arrays;

public class Demo04 {
public static void main(String[] args) throws Exception {
String v1 = "彭于晏";
byte[] v2 = v1.getBytes(); // 默认utf-8
System.out.println(v2); // [B@1540e19d 对象形式显示
System.out.println(Arrays.toString(v2)); // [-27, -67, -83, -28, -70, -114, -26, -103, -113]

// GBK
byte[] v22 = v1.getBytes("GBK"); // 默认utf-8
System.out.println(v22); //[B@677327b6
System.out.println(Arrays.toString(v22)); //[-59, -19, -45, -38, -22, -52]

}
}

字节有无符号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 字节有无符号
Python字节无符号(不含负数): 0 ~ 255
0 1 2 3 4 5 ... 127 128 129 130 ... 255

Java字节是有符号(含有负数):-128 ~ 127
0 1 2 3 4 5 ...127 -128 -127 - 126 -125 .... -2 -1

# python:彭于晏
[229, 189, 173, 228, 186, 142, 230, 153, 143]
# java:彭于晏
[-27, -67, -83, -28, -70, -114, -26, -103, -113]


### 编写一个java字节数组转换为python的字符串代码
逻辑是:数字大于0,不操作,小于0,加上256

v1 = [-27, -67, -83, -28, -70, -114, -26, -103, -113]
def java_arr_to_python_str(v1):
num_list = bytearray()
for i in v1:
if i < 0:
i = i + 256
num_list.append(i)
return num_list.decode('utf-8')


if __name__ == '__main__':
print(java_arr_to_python_str(v1))

4.2 整数类型

1
2
3
4
5
6
7
8
9
10
11
12
13
// byte	带符号字节型	  8位	-128 ~ 127
// short 带符号字节型 16位 -32768 ~ 32767
// int 带符号字节型 32位 -231 -2147483648 ~ 2147483647
// long 带符号字节型 64位 -263 -9223372036854775808 ~ 9223372036854775807

byte v1 = 32;
short v2 = 10000;
int v3 = 22221331;
long v4 = 554534353424L;
System.out.println(v1);
System.out.println(v2);
System.out.println(v3);
System.out.println(v4);

4.3 小数类型

1
2
3
4
5
6
//float	  单精度	32位	  
//double 双精度 64位
float f=1.123456789012f;
System.out.println(f);
double d=1.12345678901234567890d;
System.out.println(d);

4.4 字符类型

1
2
3
char v1 = 'x';
char v2 = '贾';
String v3 = "彭于晏";

4.5 字符串类型

1
2
3
4
5
6
7
8
9
10
11
12
String v1 = "彭于晏";
String v2 = new String("彭于晏");

String v3 = new String(new byte[]{-27, -67, -83, -28, -70, -114, -26, -103, -113});
String v9 = new String(new byte[]{-59, -19, -45, -38, -22, -52},"GBK");
String v4 = new String(new char[]{'彭', '于', '晏'});

System.out.println(v1);
System.out.println(v2);
System.out.println(v3);
System.out.println(v4);

字符串常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
String origin = "hello world 中国";

// 1 取指定位置字符
char v1 = origin.charAt(13); // 取出字符 国
System.out.println(v1);

// 2 循环输出每个字符
int len = origin.length(); // 字符串长度
for (int i = 0; i < len; i++) {
char item = origin.charAt(i);
System.out.println(item);
}
// 3 去除前后空白
String v2 = origin.trim(); // 去除空白
System.out.println(v2);
// 4 转大写
String v3 = origin.toLowerCase(); // 小写
System.out.println(v3);
String v4 = origin.toUpperCase(); // 大写
System.out.println(v4);
String[] v5 = origin.split(" "); // 按空格分隔
System.out.println(v5);
String v6 = origin.replace("h", "l"); // 把h替换为l
System.out.println(v6);
String v7 = origin.substring(2, 6); // 子字符串=切片 [2:6]
System.out.println(v7);
boolean v8 = origin.equals("hello world"); // 比较字符串是否相等
System.out.println(v8);
boolean v9 = origin.contains("中"); // 字符串是否包含
System.out.println(v9);
boolean v10 = origin.startsWith("a"); // 字符串是否以xx开头
System.out.println(v10);
String v11 = origin.concat("哈哈哈"); //在字符串末尾追加
System.out.println(v11);

字节数组和字符串相互转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//1  字符串转字节数组
byte[] b = v4.getBytes(); // 默认utf8形式
System.out.println(b); // 输出对象形式,看不到字节数组
System.out.println(Arrays.toString(b));


// try {
// byte[] b1 = v4.getBytes("GBK"); // 'GBK'形式,需要捕获异常
// } catch (Exception e) {
//
// }
byte[] b1 = v4.getBytes("GBK"); // 'GBK'形式,需要捕获异常,或在方法上 throws Exception
System.out.println(Arrays.toString(b1));


// 2 字节数组转字符串
String v8 = new String(new byte[]{-27, -67, -83, -28, -70, -114, -26, -103, -113});
String v9 = new String(new byte[]{-59, -19, -45, -38, -22, -52},"GBK");
System.out.println(v8);
System.out.println(v9);

字符数组和字符串相互转换

1
2
3
4
5
6
7
8
9
10
// 1 字符数组转字符串
char[] c=new char[]{'彭','于','晏'};
String v1 = new String(c);
System.out.println(v1);

// 2 字符串串转字符数组
String str1 = "彭于晏";
char[] c=str1.toCharArray();
System.out.println(c.length);
System.out.println(c[0]);

字符串拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
### 1 直接相加,效率低
String s="hello"+"world"+"中国";

### 2 使用StringBuilder或StringBuffer拼接
StringBuilder sb = new StringBuilder(); // StringBuffer线程安全
//StringBuffer sb = new StringBuffer(); // StringBuffer线程安全
sb.append("hello");
sb.append(" ");
sb.append("world");
sb.append(" ");
sb.append("中");
sb.append("国");
System.out.println(sb.toString());

image-20240517155908605

4.5 数组类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 存放固定长度的元素。 容器类型,放多个元素,但是 固定长度,存储类型固定

int[] numArray = new int[3];
numArray[0] = 123;
// numArray[1] = "xxx"; // 不能放字符串类型
numArray[2] = 99;
System.out.println(numArray); // 打印出对象形式
System.out.println(Arrays.toString(numArray));


String[] names = new String[]{"彭于晏", "刘亦菲", "迪丽热巴"};
System.out.println(Arrays.toString(names));

String[] nameArray = {"彭于晏", "刘亦菲", "迪丽热巴"};
System.out.println(Arrays.toString(nameArray));

4.6 boolean类型

1
2
3
boolean b=true;
b=false;
System.out.println(b);

__END__