JAVA 开发
编写代码、编译代码、运行代码
结论:
- 只要装了 JDK 就拥有了 JAVA 程序开发和运行的全部环境
- 在企业的部署环境下(上线测试),只需要安装 JRE 即可运行编译好的 JAVA 程序(.class)
注意事项
一、配置环境
现在的 JDK 自动帮你配置环境变量(javapath),但以前的 JDK 需要自己配置环境变量
若用的是老版 JDK,需配置可参考此视频
二、查看文档
① 选中 symbol,同时按下 CTRL + SHIFT + i
,查看定义
② 选中 symbol,同时按下 CTRL + Q
,查看快速文档
② 按下 CTRL
键,将光标悬停在任何 symbol 上,点击进入详细文档
三、关于多个版本 JDK
基础语法
数据类型
输入输出 API
我认为 JAVA 的 API 就是面向对象的典型,各种 API 全是 new 一个新的对象,再调用对象进行操作,因此看 API 文档可能相当重要,因为该用的功能全在类中
// 导包
import java.util.Scanner;
// 创建扫描对象
Scanner sc = new Scanner(System.in);
// 调用功能
int age = sc.nextInt();
String name = sc.next();
随机类 API
// 导包
import java.util.Random;
// 创建扫描对象
Random r = new Random();
// 调用功能
int number = r.nextInt();
数组
# 定义一维度数组
int[] data = new int[10];
int[] data = new int[]{1, 2, 3, 4, 5};
int[] data = {1, 2, 3, 4, 5};
# 打印一维度数组(三种方法)
System.out.println(Arrays.toString(data));
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
for (int a : data)
System.out.println(a);
# 定义二维数组
int[][] data = {
{16, 3, 2, 13},
{5, 10, 11, 8},
{9, 6, 7, 3}
};
# 打印二维度数组
System.out.println(Arrays.deepToString(data));
方法
JAVA 的方法类似于 C 语言的函数,其构造方法如下:
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
- 修饰符
- 访问修饰符(default、private、public、protected)
- 非访问修饰符(default、static、final、abstract、synchronized、volatile)
- 返回值类型
- 方法名
- 参数类型
- 方法体
这里简单说一下对象,举个例子:
public class System {
public void println(String x) {
// 这个构造器仅有一个参数:x
// 方法体
}
public static void main(String[] args) {
// 下面的语句将创建一个 println 对象
System out = new println("tommy");
}
}
这个例子的类就是 System
,类里面有 println
方法,在主方法中创建了一个对象名为 out
的 println
对象,当我们 System.out.println("6")
时,就是按照 类.对象.方法 的格式调用了这个类的对象的方法【注意我这里只是举例子,实际上 System
类中没有主方法,我们一般是在含主方法的类中调用,所以才加上个 System
】
问:JAVA 里每个包里是不是有且只有一个 main
函数呢?
答:当然不是。 可以没有,也可以多个类里有,只不过如果是可执行的 jar 包的话只能指定其中一个类为启动类,执行时默认执行该类的 main
方法
基本类型的参数传递
基本数据类型只有 8 种,可按照如下分类:
① 整数类型:long、int、short、byte
② 浮点类型:float、double
③ 字符类型:char
④ 布尔类型:boolean
- 在方法中定义的局部基本数据类型变量的具体内容是存储在栈中的
- 举例:
public class HelloWorld {
public static void main(String[] args) {
int a = 10;
change(a);
System.out.println(a);
}
public static void change(int a) {
a = 20;
}
}
引用类型的参数传递
引用数据类型非常多,大致包括:
类、接口类型、数组类型、枚举类型、注解类型、字符串型(简单来说,所有的非基本数据类型都是引用数据类型)
- 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
- 举例:
public class HelloWorld {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3};
change(arr);
System.out.println(arr[1]);
}
public static void change(int[] arr) {
arr[1] = 222;
}
}
这里顺便普及一下 JAVA 的内存:
参考:CSDN(Java中的栈内存与堆内存以及申请数组的底层过程)
JAVA 在内存中划分 5 片空间进行数据的存储,分别是:1:寄存器 2:本地方法区 3:方法区 4:栈 5:堆
栈的特点:
- 对象的引用变量都在函数的栈内存中分配
- 数据一执行完毕,变量会立即释放,节约内存空间
- 变量没有默认初始化值,需要手动设置
堆的特点:
- 存储的都是数组和对象(其实数组也是对象)
- 都是实体(实体:用于封装数据,而且能封装多个)
- 每一个实体都有一个首地址值
- 垃圾回收机制(释放方式)
- 每一个变量都有默认初始化值,根据类型的不同而不同(和 C 语言一样)
举个例子:int [] arr = new int [3]
,arr
是局部变量, 在栈内存里面,new int [3]
是实体,在堆内存里面
问:局部变量该怎么利用方法修改?
答:利用 JAVA 自带的类及其方法(还是 C 好啊,一个指针或引用就解决了)
方法重载
也称多态,即方法名相同,传递参数不同
public class HelloWorld {
public static void main(String[] args) {
add(10);
add(10, 20);
}
public static void add(int a) {
System.out.println(a);
}
public static void add(int a, int b) {
System.out.println(a + b);
}
}
面向对象编程
类
public class HelloWorld {
String tmp1 = "tmp1";
static String tmp2 = "tmp2";
public void test() {
System.out.println("Test");
}
public static void main(String[] args) {
String tmp3 = "tmp3";
// System.out.println(tmp1);
System.out.println(tmp2);
System.out.println(tmp3);
HelloWorld hw = new HelloWorld();
System.out.println(hw.tmp1);
hw.test();
}
}
/* 打印结果
tmp2
tmp3
tmp1
Test
*/
一个类一般包含以下:
- 成员变量【tmp1】
- 类变量【tmp2】
- 局部变量【tmp3】
- 方法(默认含有构造方法和 main 方法)【test】
源文件声明规则
- 一个源文件(.java)中只能有一个 public 类
- 一个源文件(.java)可以有多个非 public 类
- 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java。
- 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
- 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间
建议:一个 JAVA 文件定义一个 class 类
emmm
实时代码模板
psvm
main 方法sout
System.out.println()
好用的快捷键
CTRL + SHIFT + F10
运行代码CTRL + ALT + l
格式化代码CTRL + /
注释CTRL + SHIFT + /
多行注释CTRL + r
文本替换