知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

Java语言基础

发表时间:2022-03-25来源:网络

本章介绍Java语言的环境搭建和编程基础,通过流程控制语句和数组锻炼逻辑思维

以下博客是根据黑马视频写的Javase全集博客笔记:黑马程序员全套Java教程_Java基础入门视频教程,零基础小白自学Java必备教程

(一)Java语言基础
(二)Java面向对象编程
(三)Java核心类库之(常用API、字符串类、集合类、泛型)
(四) Java核心类库之(异常机制)
(五)Java核心类库之(字符集/编码集、File类、递归、IO流:字节流、字符流、特殊操作流)
(六)Java核心类库之(类加载器、反射机制、模块化)
(七)Java核心类库之(Lambda表达式)
(八)Java核心类库之(接口组成更新、方法引用、函数式接口)
(九)Java核心类库之(Stream流:生成、中间、终结、收集操作)
(十)Java核心类库之(多线程:实现多线程、线程同步)
(十一)Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)

1 Java环境搭建

1.1 JDK下载

官网:https://www.oracle.com/或浏览器搜索java8download

1.2 JDK安装

傻瓜式点击下一步就行改路径安装更改JDK路径和JRE路径注意点:安装路径不要包含中文和空格,所有开发工具最好安装路径统一

1.3 JDK的安装目录

1.4 常用DOS命令

1.5 Path环境变量配置

1.右键电脑>属性>高级系统设置>高级>环境变量2.系统变量配置:点击新建,名称为JAVA_HOME,变量值为jJava安装路径,如:F:\Java3.编写Path变量:系统变量>path>编辑>新建>添加 %JAVA_HOME%\bin4.验证:cmd窗口输入javac

1.6 IDEA编辑器

快速生成语句快速生成main()方法:psvm,回车快速生成输出语句:sout,回车内容辅助键Ctrl+Alt+space(内容提示,代码补全等)快捷键注释:
1.单行:选中代码Ctrl+/,再来一次,就是取消
2.多行:选中代码Ctrl+Shift+/,再来一次,就是取消格式化:Ctrl+Alt+L

2 基本语法

2.1 注释

1.单行注释

格式://注释信息

2.多行注释

格式:/*注释信息*/

3.文档注释

格式:/**注释信息*/

2.2 关键字

关键字的字母全部小写常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观。

2.3 常量

2.4 数据类型

2.4.1 数据类型

基本数据类型 整数(byte、short、int、long)浮点数(float、double)字符(char)布尔(boolean)引用数据类型 类(class)接口(interface)数组([ ])

2.4.2 内存占用和取值范围

2.5 变量

2.5.1 定义变量

数据类型+变量名=值

2.5.2 变量的注意事项

变量名不能重复变量未赋值不能使用long类型的变量定义时,为防止整数过大,值后面加Lfloat类型的变量定义时,为防止类型不兼容,值后面加F一条语句可以定义多个变量,但需要使用逗号进行分割数值不能超过变量取值范围

2.6 标识符

2.6.1 标识符定义规则

由字母、数字、下划线(_)和美元符($)组成不能以数字开口不能是关键字区分大小写不能有空格

2.6.2 常用命名约定(驼峰法)

小驼峰命名法:方法、变量标识符是一个单词时,首字母小写范例:name标识符由多个单词组成时,第一个单词首字母小写,其他单词首字母大写范例:firstName大驼峰命名法:类标识符是一个单词时,首字母大写范例:Student标识符由多个单词组成时,全部首字母大写范例:GoodStudent

2.7 类型转换

2.7.1 自动类型转换

把一个表示数据范围小的数值或变量赋值给另一个表示数据范围大的变量范例:doubled = 10;

2.7.2 强制类型转换

把一个表示数据范围大的数值或变量赋值给另一个表示数据范围小的变量格式:目标数据类型+变量名 = (目标数据类型)值或变量范例:int k = (int)88.88

2.8 打印输出

System.out.print(打印内容) //打印后不换行 System.out.println(打印内容) //打印后换行 System.out.println() //没内容时起到换行效果

3 运算符

3.1 算术运算符

public static void main(String[] args) { int a = 6; int b = 4; System.out.println(a + b); //10 System.out.println(a - b); //2 System.out.println(a * b); //24 System.out.println(a / b); //1 System.out.println(a % b); //2 //除法得到商,取余得到余数 //整数相除只能得到整数,要想得到小数要有浮点数参与 System.out.println(6.0 / 4); //1.5 }

3.1.1 字符的“+”操作

字符进行“+”操作时,拿的是字符在计算机底层对应的数值进行操作 ‘A’ > 65‘a’ > 97‘o’ > 48算术运算符表达式中多个基本数据类型的值的时候,整个算术运算符的类型会自动提升提升规则: 1.byte类型、short类型和char类型都会提升到int类型2.整个表达式的类型自动提升到表达式中最高等级操作数同样类型
等级顺序:byte、short、char -> int -> long -> float -> double范例:public class Demo { public static void main(String[] args) { int i = 10; char c = '0'; System.out.println(i + c); //75 //char cj = i + c; //char类型会自动提升到int类型 int j = i + c; System.out.println(j); //75 //10.1是double类型高于int类型 //int k = 10 + 10.1; double k = 10 + 10.1; } }

3.1.2 字符串的“+”操作

当 “+” 操作出现字符串时,这个 “+” 是字符串连接符,而不是算术运算符范例:System.out.println('it'+6+66) //it666 在 “+” 操作中,如果出现字符串就是连接符,否则就是算术运算。当连续 “+” 操作时,从左到右依次执行。范例:System.out.println(1+99+'it') //100it

3.2 赋值运算符

注意事项:扩张的赋值运算符隐含强制类型转换。

3.3 自增自减运算符

++ 和 - - 可以放变量前面也可以放变量后面单独使用时, ++ 和 - - 放变量前后结果都是一样的参与操作使用时,如果放变量后面,先拿变量参与操作,后拿变量做++或- -;
参与操作使用时,如果放变量前面,先拿变量做++或- -,后拿变量参与操作。范例:public class Demo { public static void main(String[] args) { //单独使用 int i = 10; //i++; ++i; System.out.println(i); //11 //参与操作使用++在后面 int b = 10; int j = b++; System.out.println(b); //11 System.out.println(j); //10 //参与操作使用++在前面 int c = 10; int k = ++c; System.out.println(c); //11 System.out.println(k); //11 } }

3.4 关系运算符

关系运算符的结果都是boolean类型,要么true,要么false

3.5 逻辑运算符

符号作用说明&逻辑与同真为真,其余为假(满足两个为真)|逻辑或同假为假,其余为真(满足一个为真即可)^逻辑异或相同为false,不同为true!逻辑非取反

3.6 短路逻辑运算符

符号作用说明&&短路与作用与&相同,但是有短路效果||短路或作用与竖线相同,但是有短路效果范例:public class Demo { public static void main(String[] args) { int i = 10; int j = 20; //&& :具有短路效果,符号左边为false的时候,右边就不执行 //如果符号左边为true,右边要继续执行 System.out.println((i++>100) && (j++>100)); //false & false, System.out.println("i="+i); //11 System.out.println("j="+j); //20 } }

注意事项:

1、逻辑与 &:无论左边真假,右边都要执行

2、短路与 &&:如果左边为真,右边执行;如果左边为假,右边不执行

3、逻辑或 | : 无论左边真假,右边都要执行

4、短语或 ||:如果左边为假,右边执行;如果左边为真,右边不执行

3.7 三元运算符

格式:关系表达式 ? 表达式1 :表达式2;范例:a > b ? a : b;计算规则
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果;
如果值为false,表达式2的值就是运算结果。范例public class Demo { public static void main(String[] args) { int i = 10; int j = 20; //输出两个数据中的较大值 int max = i > j ? i : j; System.out.println("max=" + max); //20 } }

3.8 Scanner使用的基本步骤

导包的三种方式

1、手动导包:import java.util.Scanner;2、快捷键导包:创建好Scanner对象后,鼠标放在Scanner上按Alt+Enter3、自动导包:写Scanner单词创对象时,按tab补全导包

导包的步骤

1.导包import java.util.Scanner; //导包必须在定义类上面 2.创建对象Scanner sc = new Scanner(System.in); //只有sc是变量名可以变,其他都不可以变 3.接收数据int i = sc.nextInt(); //i是变量名可以变,其他都不能变 sc.nextInt(); //Ctrl+alt+v:补全生成左边的内容

3.9 案例:三个和尚

import java.util.Scanner; public class Demo { public static void main(String[] args) { //从键盘输出三个身高求出最高值 Scanner sc = new Scanner(System.in); //键盘输入三个数值 int height1 = sc.nextInt(); int height2 = sc.nextInt(); int height3 = sc.nextInt(); int temp = (height1>height2) ? height1:height2; int max = (temp>height3) ? temp:height3; System.out.println(max); } }

4 流程控制语句

4.1 流程控制语句分类

顺序结构分支结构(if、switch)循环结构(for、while、do…while)

4.2 if语句

4.2.1 if语句格式1

格式if(关系表达式) { 语句体; } 执行流程
1、首先计算关系表达式的值
2、如果关系表达式的值为true就执行语句体
3、如果关系表达式的值为false就不执行语句体
4、继续执行后面的语句内容

4.2.2 if语句格式2

格式if(关系表达式) { 语句体1; }else { 语句体2; } 执行流程
1、首先计算关系表达式的值
2、如果关系表达式的值为true就执行语句体1
3、如果关系表达式的值为false就执行语句体2
4、继续执行后面的语句内容

4.2.3 if语句格式3

格式if(关系表达式1) { 语句体1; }else if(关系表达式2){ 语句体2; } ... else { 语句体n+1; } 执行流程
1、首先计算关系表达式1的值
2、如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
3、如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

4、如果没有任何关系表达式值为true就执行语句体n+1范例import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入你的成绩"); int score = sc.nextInt(); if(score == 100){ System.out.println("满分"); }else if(score >= 90) { System.out.println("优秀"); }else if(score >= 80) { System.out.println("良好"); }else if(score >= 70) { System.out.println("中等"); }else if(score >= 60) { System.out.println("及格"); }else { System.out.println("不及格"); } } }

4.3 switch语句

格式switch(表达式) { case1: 语句体1; break; case2: 语句体2; break; ... default: 语句体n+1; break; //最后一个可以省略 格式说明 表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是Stringcase:后面跟的是要跟表达式比较的值break:表示中断结束的意思,用来结束switch语句default:表示所有情况都不匹配的时候,就执行该处内容,和if语句中的else相似执行流程
1、首先计算表达式的值
2、以此和case后面的值进行比较,如果有对应值,就会执行相应语句,在执行过程中,遇到break就会结束
3、如果所有的case的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束注意事项:在switch语句中,如果case控制的语句后面不写break,将会出现穿透现象,在不判断下一个case的情况下,向下运行,直到遇到break,或者整体程序结束案例:初夏秋冬(case穿透)import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个月份"); int month = sc.nextInt(); switch(month) { //case穿透 case 1: case 2: case 12: 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("你输入的月份有误"); } } }

4.4 for循环语句

格式for(初始化语句;条件判断语句;条件控制语句){ 循环体语句; } 流程图
执行流程
1、执行初始化语句
2、执行条件判断语句,且看结果是true还是false
如果是false,循环结束;如果是true,继续执行
3、执行循环体语句
4、执行条件控制语句
5、返回到2继续

4.4.1 案例1: 输出数据

public class Demo { public static void main(String[] args) { // 输出1-5 for(int i=1;i System.out.print(i + " "); //5 4 3 2 1 } } }

4.4.2 案例2: 求1-5数据和

public class Demo { public static void main(String[] args) { int sum = 0; for(int i=1;i public static void main(String[] args) { int sum = 0; for(int i=1;i sum += i; } } System.out.println(sum); } }

4.4.4 案例4: 打印1-100的数每行10个

public class Demo { public static void main(String[] args) { //打印1-100,每行10个 int a = 0; for(int i=0;i //10代表每行10个,可以换为所需个数 System.out.println(); //10个后换行 } } } }

4.4.5 案例5: 水仙花数

什么是水仙花数?
1、水仙花数是一个三位数
111 333 456 999 530
2、水仙花数的个位、十位、百位的数字立方和等于原数
怎么获取个位、十位、百位上的数
1、个位数
371 ;1就是原始数字对10进行取余的运算结果;371 % 10 = 1
2、十位数
371;371通过除以10,可以将7移动到个位上去(整数);371 / 10 = 37
37 ;37对10进行取余可以得到最后一位的值7 ; 37 % 10 = 7
3、百位数
371 ; 3就是原始数字除以100的结果(整除);371 /100 = 3
4、思考:任意数字的指定位置上的数值如何求?
123456789 ; 先10000得到12345;再对10取余得到5public class Demo { public static void main(String[] args) { for(int i=100;i System.out.println("水仙花数:"+i); //有153、370、371、407 } } } }

4.4.6 案例6: 统计水仙花个数

public class Demo { public static void main(String[] args) { int count = 0; //存放判断水仙花的次数 for(int i=100;i count++; } } System.out.print("水仙花共有"+count+"个"); //4个 } }

4.5 while循环语句

用法:用来描述未知次数循环格式:初始化语句; while(条件判断语句) { 循环体语句;//比如:输出内容 条件控制语句; } 执行流程
1、执行初始化语句;
2、执行条件判断语句,看其结果为true还是false
如果是false,循环结束;如果是true,继续执行
3、执行循环体语句
4、执行条件控制语句
5、回到2继续案例:珠穆朗玛峰public class Demo { public static void main(String[] args) { //需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米) //假如我有一张足够大的纸,它的厚度是0.1毫米。 //请问,我折叠多少次,可以折成珠穆朗玛峰的高度? //1.定义计数器变量,用于统计折叠的次数 int count = 0; //2.定义纸张厚度变量 double paper = 0.1; //3.定义珠峰高度变量 int zf = 8844430; //不知道循环次数,更适合使用while while(paper 循环体语句;//比如:输出内容 条件控制语句; }while(条件判断语句); 执行流程
1、执行初始化语句
2、执行循环体语句
3、执行条件控制语句
4、执行条件判断语句,看其结果为true还是false
如果是false,循环结束;如果是true,继续执行
5、回到2继续

4.7 三个循环的区别

4.7.1 第一

do…while:先输出一次再进行判断(最少输出一次)for、while:先判断再输出

4.7.2第二

for循环结束后变量不能使用while循环结束后还可以使用(打印变量次数)

4.7.3死循环

for语句for(;;){ System.out.println("死循环"); } while语句while(true){ System.out.println("死循环了"); } do…while语句 do{ System.out.println("死循环"); }while(true);

4.8 跳转控制语句

continue:用于循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次执行break:用于循环中,基于条件控制,终止循环体内容执行,结束当前整个循环范例:public class Demo { public static void main(String[] args) { for(int i=1;i //continue; //为偶数时跳过输出,1 3 5 break; //当遇到偶数终止循环,只输出1 } System.out.println(i); } } }

4.9 循环嵌套

public class Demo { public static void main(String[] args) { //九九乘法表 for(int i=1;i //j //1.生成随机数1-100 Random r = new Random(); int number = r.nextInt(100)+1; // //4.不确定次数用while,死循环 while(true) { //2.键盘输出数字 Scanner b = new Scanner(System.in); System.out.println("请输入要猜的数字:"); int guessnumber = b.nextInt(); //3.比较 if(guessnumber>number) { System.out.println("你猜的数字"+guessnumber+"大了"); }else if(guessnumber System.out.println("猜对了"); break; } } } }

5 数组

数组(array [əˈreɪ] )是一种用来存储多个相同类型数据的存储模型

5.1 数组定义格式

格式1(常用)//数据类型[] 变量名; int[] arr; //定义了一个int类型的数组,数组名是arr 格式2//数据类型 变量名[]; int arr[]; //定义了一个int类型的变量,变量名是arr数组

5.2 数组初始化

5.2.1 动态初始化

初始化时只指定初始化长度,由系统为数组分配默认初始化值默认值: int:默认值0float:默认值0.0boolean:默认值falsechar:默认值是空字符引用数据类型:默认值null格式:数据类型[] 变量名 = new 数据类型[数组长度]; 范例//new:为数组申请内存空间 3:数组长度/数组中元素个数 int[] arr = new int[3]; System.out.print(arr[0]) //0 系统分配的默认初始化值

5.2.2 静态初始化

初始化指定数组元素,系统会根据元素个数,计算出数组的长度格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,.....} 数据类型[] 变量名 = {数据1,数据2,数据3....} //简化格式 范例int[] arr = new int[]{1,2,3}; System.out.println(arr[0]); int[] arr1 = {1,2,3}; System.out.println(arr1[0]); //1

5.3 数组元素访问

数组变量访问方式格式:变量名数组内部保存数据访问方式格式:数组名[索引] //0、1、2、3…int[] arr1 = {1,2,3}; System.out.println(arr1); //[I@1b6d3586:内存空间地址值 System.out.println(arr1[0]); //1 System.out.println(arr1[1]); //2 System.out.println(arr1[2]); //3

5.4 内存分配

栈内存:存储局部变量(定义在方法中的变量,如:arr,使用完毕立刻消失)堆内存:存储new出来的内容(实体、对象)(垃圾回收器空闲时回收)

5.5 遍历数组

获取数组元素个数,格式:数组名.lengthpublic class Demo { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; for(int i=0;i public static void main(String[] args) { int[] arr = {2,6,7,8,1,3,5,4,9}; int max = arr[0]; for(int i=1;i max = arr[i]; } } System.out.println(max); //循环结束后打印 } }

6 二维数组

6.1 二维数组格式

格式一 :数据类型[ ][ ] 变量名;int[][] arr; 格式二 :数据类型 变量名[][];int arr[][]; 格式三 :数据类型[] 变量名[];int[] arr[];

6.2 动态初始化

格式:数据类型[ ][ ] 变量名 = new 数据类型[m][n]; m:行n:列(每行可以存放多少数据)范例public class Demo { public static void main(String[] args) { int[][] arr = new int[2][3]; for(int[] row : arr) { for(int data : row) { System.out.printf("%d\t",data); // 0 0 0 } // 0 0 0 System.out.println(); } } }

6.3 访问元素

public class Demo{ public static void main(String[] args){ /* 问题:二维数组中存储的是一维数组,那能不能存入[提前创建好的一维数组]呢? */ int[] arr1 = {11,22,33}; int[] arr2 = {44,55,66}; int[] arr3 = {77,88,99,100}; int[][] arr = new int[3][3]; arr[0] = arr1; arr[1] = arr2; arr[2] = arr3; //输出二维数组 for(int[] row : arr) { for(int data : row) { System.out.printf("%d\t",data); //11 22 33 } //44 55 66 System.out.println(); //77 88 99 100 } System.out.println(arr[1][2]); //66 System.out.println(arr[2][3]); //100 } }

6.4 静态初始化

格式1:格式: 数据类型[ ][ ] 变量名 = new 数据类型[ ][ ] {{元素1,元素2…},{元素1,元素2…}};int[][] arr = new int[][]{{11,22},{33,44}}; 格式2(简化格式):数据类型[][] 变量名 ={{元素1,元素2},{元素1,元素2…}};int[][] arr = {{11,22},{33,44}};

6.5 遍历二维数组

public class Demo{ /* 需求:已知一个二维数组 arr = {{11,22,33},{44,55,66}} 遍历该数组,取出所有元素并打印 */ public static void main(String[] args){ int[][] arr = {{11,22,33},{44,55,66}}; // 遍历二维数组,取出里面每一个一维数组 for(int i = 0;i System.out.print(arr[i][j]+" "); //11 22 33 44 55 66 } } } }

前七章知识点案例总结

1.缝七过

public class Demo { public static void main(String[] args) { //个位是7,十位是7,7的倍数过 //i%10==7 i/10%10==7 i%7==0 for (int i = 1; i System.out.print(i + " "); } } } }

2.不死神兔


public class Demo { public static void main(String[] args) { //1 int[] arr = new int[20]; //2 arr[0] = 1; arr[1] = 1; //3 for(int x=2;x public static void main(String[] args) { //1.第1层循环,用来表示鸡公范围,x=0,x //3.小鸡数量 int z = 100 -x -y; //4.三种鸡的总钱是否等于100 if(z%3==0 && 5*x+3*y+z/3==100){ System.out.println("公鸡个数:"+x+","+"母鸡个数"+y+","+"小鸡个数"+z); // 公鸡个数:0,母鸡个数25,小鸡个数75 // 公鸡个数:4,母鸡个数18,小鸡个数78 // 公鸡个数:8,母鸡个数11,小鸡个数81 // 公鸡个数:12,母鸡个数4,小鸡个数84 } } } } }

4.数组元素求和

public class Demo { public static void main(String[] args) { int[] arr = {68,27,95,88,171,996,51,210}; int sum = 0; for(int i=0;i sum += arr[i]; } } System.out.println(sum); //1362 } }

5.数组内容相同

public class Demo { public static void main(String[] args) { int[] arr = {11, 22, 33, 44, 55, 66}; //int[] arr2 = {11, 22, 33, 44, 55, 66}; //返回true int[] arr2 = {22, 11, 33, 44, 55, 66}; //返回false boolean a = compare(arr, arr2); System.out.println(a); } public static boolean compare(int[] arr, int[] arr2) { //比较长度 if (arr.length != arr2.length) { return false; } //比较元素内容 for (int i = 0; i return false; } } //都相同时 return true; } }

6.查找

import java.util.Scanner; public class Demo { public static void main(String[] args) { int[] arr = {19,28,35,42,56}; Scanner sc = new Scanner(System.in); System.out.println("请输入一个数"); int number = sc.nextInt(); int index = getIndex(arr,number); System.out.println("索引下标为:"+index); } public static int getIndex(int[] arr,int number) { //索引变量 int index = -1; //遍历数组 for(int i=0;i index = i; break; } } return index; } }

7.反转

public class Demo { public static void main(String[] args) { int[] arr = {11,22,33,44,55}; //初始化两个索引变量用逗号隔开 for(int start=0,end=arr.length-1;start System.out.print(arr[i]+" "); //55 44 33 22 11 } } }

8.评委打分

import java.util.Scanner; public class Demo { public static void main(String[] args) { int[] arr = new int[6]; Scanner sc = new Scanner(System.in); //1.键盘输入六个评委的分数 for(int i=0;i int sum = 0; for(int i=0;i int min = arr[0]; for(int i=1;i min = arr[i]; } } return min; } //获取最大值 public static int getMax(int[] arr) { int max = arr[0]; for(int i=1;i max = arr[i]; } } return max; } //遍历数组 public static void printArray(int[] arr) { System.out.print("["); for(int i=0;i System.out.print(arr[i]); }else { System.out.print(arr[i]+","); } } System.out.print("]"); } }

8 import导包

格式:`import 包名;范例:`Demo类中导入Student类的方法
Student类package Student; public class Student { public void study(){ System.out.println("学习"); } } Demo类package test; import Student.Student; public class Demo { public static void main(String[] args) { Student s = new Student(); s.study(); //学习 } }
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜