Java环境搭建
1、JDK和JRE的概述
-
JDK:Java开发工具包(Java Development Kit), 包含开发工具 和 JRE.
-
常用的开发工具: javac, java
-
-
JRE:Java运行时环境(Java Runtime Environment), 包含运行Java程序时所需的核心类库和 JVM.
-
核心类库: java.lang, java.util, java.io
-
-
JVM:Java虚拟机(Java Virtual Machine)
作用: 用来保证Java程序跨平台性的, 但是JVM本身并不能跨平台.
常用快捷键
五、Java基础语法
1、注释
注释常见分类为三种:分别是单行注释、多行注释、文档注释
//单行注释 /* 多行注释 多行注释 */ /** 文档注释 文档注释 */
2、分隔符
Java 语言里的分号(;) 花括号({})、方括号([])、圆括号(())、 圆点(.)都具有特殊的分割作用,被统称为分隔符。
-
分号(;) 是Java语言分隔语句的,每个 Java 语句都是使用分号作为结尾。
-
花括号({})作用是定义了一个代码块,一个代码块指的是”{” 和 “}” 所包含的代码片段,代码块逻辑上是一个整体,花括号是成对出现的。
-
方括号([])作用是用于访问数组元素,方括号通常跟着数组变量名;
-
圆括号(()) 功能较多,定义方法使用圆括号来包含参数声明;调用方法传递实参值;圆括号可以作为强制类型转换运算符等;
-
圆点(.)作用类/对象和它的成员(包含成员变量、方法和内部类)之间的分隔符,表明调用某个类或某个实例的指定成员。
5、变量variable
在程序的执行过程中, 其值可以在某个范围内发生改变的量就叫变量.
Java中要求一个变量每次只能保存一个数据,而且必须要明确保存数据的数据类型
package com.itheima;
public class Test01_变量 {
public static void main(String[] args) {
// 定义变量: 方式一 声明变量并赋值
// 格式: 数据类型 变量名 = 值
int a = 100;
System.out.println(a);
// 定义变量: 方式二 先声明 后赋值
int b; // 声明
b = 50; // 赋值
System.out.println(b);
// 尝试, 定义一个变量 不赋值, 直接打印即可 直接报错, 告知没有赋值
int c = 10;
System.out.println(c);
// 尝试定义一个字节类型的变量, 尝试赋值
byte d = -128;
System.out.println(d);
}
}
生成随机数
package com.itheima.demo01;
import java.util.Random;
import java.util.Scanner;
public class random_number {
public static void main(String[] args){
Random random = new Random();
int computerNum = random.nextInt(100) ;
System.out.println("生成的随机数是:"+ computerNum);
// 键入
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请输入一个数字【1-100】,与系统随机数进行比较:");
int userNum = sc.nextInt();
///进行判断
if (userNum>computerNum){
System.out.println("您输入的值大于了随机数");
}else if (userNum<computerNum){
System.out.println("您输入的值小于了随机数");
}else {
System.out.println("恭喜您,匹配成功");
break;
}
}
}
}
二、流程控制
和Python中一样, Java中也是有分支结构和循环结构的, 它们的用法都一样, 只是写法稍有不同, 接下来, 我们来研究下Java中分支结构和循环结构的格式.
1、if语句
如果我们想某些代码是在满足条件的情况下, 才能被执行, 此时就需要用到选择结构了, 选择结构也叫分支结构, 主要分为以下两种:
-
if语句, 主要用于范围的判断
-
switch.case语句, 主要用于固定值的判断.
if语句格式:
package com.itheima.demo01;
import java.util.Scanner;
public class if_elseif_else {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
double score = sc.nextDouble();
if(score>=85){
System.out.println("您的成绩优秀");
}else if(score>=75){
System.out.println("您的成绩中等");
}else if(score>=60){
System.out.println("您的成绩刚刚及格");
}else {
System.out.println("您成绩不合格");
}
}
}
2、switch语句
switch语句, 一般是用于做固定值判断的
格式:
示例:
1 一年有12个月, 分属于春夏秋冬4个季节, 键盘录入一个月份, 请用程序实现判断该月份属于哪个季节, 并输出。
package com.itheima.demo01;
import java.util.Scanner;
//示例:
//
//1 一年有12个月, 分属于春夏秋冬4个季节, 键盘录入一个月份, 请用程序实现判断该月份属于哪个季节, 并输出。
public class Switch {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个月份:");
int month = sc.nextInt();
switch (month){
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("您输入的数字有误,请重新输入");
break;
}
}
}
3、for循环
for循环是我们在实际开发中应用到的最多的循环, 它一般适用于循环次数固定的情况.
格式:
for(初始化条件1; 判断条件2; 控制条件3) { //循环体; }
说明:
1 初始化条件: 用来记录 循环的初始状态的. 即: 从哪开始循环.
2 判断条件: 用来决定循环是否继续执行的, 条件成立, 则循环继续执行, 条件不成立, 整个循环就结束了.
3 控制条件: 用来控制初始化条件变化的, 一般是每循环一次, 初始化条件+1.
4 循环体: 需要用来重复做的事情(代码).
package com.itheima.demo01;
public class For_xunhuan {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
for (int a = 5; a >= 1; a--) {
System.out.println(a);
}
int sum = 0;
for (int b = 1; b <= 100; b++) {
if (b % 2 == 0) {
sum += b;
}
}
System.out.println("1到100的偶数和为:"+sum);
}
}
三、数组
和Python中一样, Java中也是有用来同时存储多个同类型元素的容器的, 那就是: 数组。在一个数组中,数据元素的类型是唯一的,即一个数组中的元素的类型相同。
1、定义格式
-
方式一: 动态初始化 (我们给定长度, 由系统给出默认初始化值)
格式一: 数据类型[] 数组名 = new 数据类型[长度]; 格式二: 数据类型 数组名[] = new 数据类型[长度];
解释: 上述两种定义方式只是写法不同, 并无其他区别
-
方式二: 静态初始化(我们给定初始化值, 由系统指定长度)
格式一: 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3}; 格式二: 数据类型[] 数组名 = {元素1, 元素2, 元素3};
解释: 上述两种定义方式只是写法不同, 并无其他区别.
数组中的每个元素都是有编号的, 且编号是从0开始的. 可以方便我们快速操作数组中的元素.
解释: 编号也叫索引(这个是最常见的念法), 下标、角标、index
数组中每个元素都有默认值.
package com.itheima;
import java.util.Arrays;
public class Test09 {
public static void main(String[] args) {
//1. 创建一个数组
// 方式一: 动态指定, 构建数组的时候, 只需要指定长度即可
int[] arr1 = new int[10];
//int arr2[] = new int[10];
// 方式二: 静态指定, 构建数组的时候, 直接指定数组中每一个元素的值
//double[] arr3 = new double[]{3.5,6.2,1.3,4.5};
double[] arr4 = {3.5,6.2,1.3,4.5};
//2. 执行相关的操作
// 2.1 如何获取数组中指定位置的元素: 在数组中, 通过索引下标的方式获取, 默认下标从0开始
int e1 = arr1[2];
System.out.println(e1);
double e2 = arr4[3];
System.out.println(e2);
//double e3 = arr4[4]; // 注意: 当获取超出数组范围的数据时候, 会报出如下的错误: ArrayIndexOutOfBoundsException
//System.out.println(e3);
// 2.2 如何为数组中元素进行重新赋值
arr1[2] = 10;
System.out.println(arr1[2]);
// 2.3 如何获取数组的长度:
int length = arr4.length;
System.out.println(length);
// 2.4 遍历数组
System.out.println("-------------------");
// for循环
for(int i = 0; i< arr4.length; i++){
System.out.println(arr4[i]);
}
// while循环
System.out.println("-------------------");
int i = 0;
while(i< arr4.length){
System.out.println(arr4[i]);
i++;
}
// 增强for: 迭代器 快捷键: iter + 回车 此种方式与Python中For循环有一些相似了
System.out.println("-------------------");
for (double v : arr4) {
System.out.println(v);
}
System.out.println("-------------------");
// 2.5 将arr4中数据进行反转操作
double[] arr5 = new double[arr4.length];
for(int j = arr4.length-1; j >= 0; j--){
arr5[arr4.length -1 - j] = arr4[j];
}
System.out.println(Arrays.toString(arr5)); // 将数组以字符串的形式打印出来
// 演示 小错误:
String[] arr6 = new String[10];
String e3 = arr6[2]; // 注意 e3 = Null
e3.concat("xxx'"); // 注意: 使用 null 调用API, 会报: NullPointerException (空指针异常)
}
}
3、了解数组的内存图介绍
内存是计算机中的重要原件,也是临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
即: Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
四、方法
Python中的函数, 是将具有独立功能的代码块组织成为一个整体,使其成为具有特殊功能的代码集。Java中也是如此。只不过,Java中的函数也叫方法.
1、定义格式
修饰符 返回值的数据类型 方法名(参数类型 参数名1, 参数类型 参数名2) { //这里可以写多个参数 //方法体; return 具体的返回值; } 修饰符: 目前记住这里是固定格式public static 返回值的数据类型: 用于限定返回值的数据类型的. 注意: 1.返回值的数据类型是int类型, 则说明该方法只能返回int类型的整数. 2.如果方法没有具体的返回值, 则返回值的数据类型要用void来修饰. 方法名: 方便我们调用方法. 定义的时候 要遵循小驼峰的命名法 参数类型: 用于限定调用方法时传入的数据的数据类型. 例如: 参数类型是String类型, 说明我们调用方法时, 只能传入字符串. 参数名: 用于接收调用方法时传入的数据的变量. 方法体: 完成特定功能的代码. return 返回值: 用来结束方法的, 并把返回值返回给调用者. 解释: 如果方法没有明确的返回值, 则return关键字可以省略不写.
注意事项:
示例:
需求一: 编写一个方法, 接收数组参数, 实现遍历数组的功能
需求二: 获取数组最值(例如: 最大值)
package com.itheima;
public class Test10_method {
// main 方法
public static void main(String[] args) {
int[] arr1 = {1,4,6,3,8,10,15};
// 调用方法
foreachArr(arr1); // 传入的参数为实参
// 获取数组中最大值
int maxNum = getMaxNum(arr1);
System.out.println("最大值为:"+maxNum);
}
// 方法的定义
public static void foreachArr(int[] arr){ // 定义参数为形参
// 遍历数组
for (int e : arr) {
System.out.println(e);
}
}
// 定义方法: 实现获取数组中最大值
public static int getMaxNum(int[] arr){
int max = arr[0];
for (int e : arr) {
if(e > max) max = e;
}
return max;
}
}