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个季节, 键盘录入一个月份, 请用程序实现判断该月份属于哪个季节, 并输出。
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
... //根据需求, 可以写多组case.
default:
语句体n;
break;
}
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 = Nulle3.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;}}