资源来自:王汉远java基础,
B站视频: https://www.bilibili.com/video/BV1b4411g7bj/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=33eb2731cb742522d03acd26e5b17ba3
网盘链接(含源代码和笔记资料PPT):1,java基础学习:
链接:https://pan.baidu.com/s/1lxrpAW6yAxzSouYQz-GaKg
提取码:anr4
课件:
链接:https://pan.baidu.com/s/1zV-4jtSKHzkmS4c6wp7Qag
提取码:cgw6
下半部分
链接:https://pan.baidu.com/s/15xOnqGo-CQelWyk4naVsJQ
提取码:sk57
之前学的java忘记差不多了,最近得好好再学一遍,计划三周学完,特写此笔记便于后期做毕设项目和工作使用。
学习开始日期:2022.11.2
学习截止日期:进行中
**注意:**视频是基于eclipse进行编写的,最好还是用IDEA,eclipse老旧了,但是基本知识点还是不变的,等下学完这些视频,和IEDA里面有不同的地方再进行对比补充笔记。
IDEA版本:链接:https://pan.baidu.com/s/1znJc2zSpj84cvB6DGQ5NAw
提取码:pj3r
1. java语言的跨平台原理
1. 打开控制台
win+ R,然后cmd回车;或者开始-搜索-输入cmd-回车。
常见DOS命令
d:回车盘符切换
进入cd目录; cd 目录名称,或者目录路径
同上图
1.Notepad++的使用
下载安装之后新建文件,点击上方的设置按钮——选择首选项——新建——格式:windows——语言:java——编码:ANSI。
2.HelloWorld案例编写
public class HelloWorld {
public static void main(String [] args) {
System.out.println(“HelloWorld”);
}
}
●注释概述
-用于解释说明程序的文字
●Java中注释分类
-单行注释
●格式: //注释文字
-多行注释
●格式:/注释文字/
-文档注释
●格式: /*注释文字/
●注释的作用
-解释说明程序,提高程序的阅读性
常量概述:
在程序执行的过程中,其值不可以发生改变的量
常量分类
-字符串常量
用双引号括起来的内容(“HelloWorld”)
-整数常量
所有整数(12,-23)
-小数常量
所有小数(12.34)
-字符常量.
用单引号括起来的内容(a,‘A’,‘0’)
-布尔常量.
较为特有,只有true和false
空常量
null(数组部分讲解)
public class HelloWorld{
public final static String CONSTANT = "HelloWorld";
public final static float PI = 3.14f;
/*主方法*/
public static void main(String[] args){
System.out.println(CONSTANT);
}
变量概述
变量定义格式
计算机存储单元
变量是内存中的小容器,用来存储数据。那么计算机内存是怎么存储数据的呢?无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母b表示。而计算机最小的存储单元叫“字节(byte)”,通常用大写字母B表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,大家可能比较熟悉,我们一起来看看:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
Java语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的。
基本数据类型(4类8种)
作用
给包,类,方法,变量等起名字
组成规则
由字符,下划线_,美元符$组成
这里的字符采用的是unicode字符集,所以包括英文大小写字母,中文字符,数字字符等。
注意事项
命名规则
常见命名的规则
类
变量或者方法
编写案例演示每种不同数据类型的变量定义
变量的定义和使用
类型转换
A:创建Java项目:
点击File或者在最左侧空白处,选择Java项目,在界面中写一个项目名称,然后Finish即可。
B:创建包:展开项目,在源包src下建立一个包com.itheima
C:创建类:在com.ithiema包下建立一个类HelloWorld
在界面中写一个类名:HelloWorld,然后finish即可。
D:编写代码
在HelloWorld类写main方法,在main方法中写一条输出语句:我是程序员,我骄傲,我自豪。
E:编译
自动编译,在保存的那一刻帮你做好了
F:运行
选择要运行的文件或者在要运行的文件内容中
右键 -- Run as - Java Application即可
A:行号的显示和隐藏
显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。
隐藏:把上面的动作再做一次。
B:字体大小及颜色
a:Java代码区域的字体大小和颜色:
window -- Preferences -- General -- Appearance -- Colors And Fonts -- Java -- Java Edit Text Font
b:控制台
window -- Preferences -- General -- Appearance -- Colors And Fonts -- Debug -- Console font
c:其他文件
window -- Preferences -- General -- Appearance -- Colors And Fonts -- Basic -- Text Font
C:窗体给弄乱了,怎么办?
window -- Perspective -- Reset Perspective
D:控制台找不到了,怎么办?
Window--Show View—Console
A:删除项目
选中项目 – 右键 – 删除
从项目区域中删除
从硬盘上删除
B:导入项目
在项目区域右键找到import
找到General,展开,并找到
Existing Projects into Workspace
点击next,然后选择你要导入的项目
注意:这里选择的是项目名称
注释多行代码:ctrl+shift+/
有用的快键键整理
来自:Eclipse快捷键大全
编辑
Ctrl+1 快速修复(最经典的快捷键,就不用多说了,可以解决很多问题,比如import类、try catch包围等)
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+M 添加类的import导入
Ctrl+Shift+O 组织类的import导入(既有Ctrl+Shift+M的作用,又可以帮你去除没用的导入,很有用)
Ctrl+Y 重做(与撤销Ctrl+Z相反)
==Alt+/ 内容辅助(帮你省了多少次键盘敲打,太常用了) ==
Ctrl+D 删除当前行或者多行
==Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) ==
Alt+↑ 当前行和上面一行交互位置(同上)
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Ctrl+/ 注释当前行,再按则取消注释
选择
Alt+Shift+↑ 选择封装元素
Alt+Shift+← 选择上一个元素
Alt+Shift+→ 选择下一个元素
Shift+← 从光标处开始往左选择字符
Shift+→ 从光标处开始往右选择字符
Ctrl+Shift+← 选中光标左边的单词
Ctrl+Shift+→ 选中光标又边的单词
移动
Ctrl+← 光标移到左边单词的开头,相当于vim的b
Ctrl+→ 光标移到右边单词的末尾,相当于vim的e
搜索
Ctrl+K 参照选中的Word快速定位到下一个(如果没有选中word,则搜索上一次使用搜索的word)
Ctrl+Shift+K 参照选中的Word快速定位到上一个
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在状态栏中显示没有找到了,查一个单词时,特别实用,要退出这个模式,按escape建)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+U 列出所有包含字符串的行
Ctrl+H 打开搜索对话框
Ctrl+G 工作区中的声明
Ctrl+Shift+G 工作区中的引用
导航
Ctrl+Shift+T 搜索类(包括工程和关联的第三jar包)
Ctrl+Shift+R 搜索工程中的文件
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
F4 打开类型层次结构
F3 跳转到声明处
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Ctrl+PageUp/PageDown 在编辑器中,切换已经打开的文件
调试
F5 单步跳入
F6 单步跳过
F7 单步返回
F8 继续
Ctrl+Shift+D 显示变量的值
Ctrl+Shift+B 在当前行设置或者去掉断点
Ctrl+R 运行至行(超好用,可以节省好多的断点)
重构
(一般重构的快捷键都是Alt+Shift开头的了)
Alt+Shift+R 重命名方法名、属性或者变量名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt+Shift+M 把一段函数内的代码抽取成方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)
Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V 移动函数和变量(不怎么常用)
Alt+Shift+Z 重构的后悔药(Undo)
其他
Alt+Enter 显示当前选择资源的属性,windows下的查看文件的属性就是这个快捷键,通常用来查看文件在windows中的实际路径
Ctrl+↑ 文本编辑器 上滚行
Ctrl+↓ 文本编辑器 下滚行
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+O 快速显示 OutLine(不开Outline窗口的同学,这个快捷键是必不可少的)
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer(windows下关闭打开的对话框也是这个,还有qq、旺旺、浏览器等都是)
Ctrl+L 文本编辑器 转至行
F2 显示工具提示描述
代码
package com.yunSuanFu;
public class YunSuanFu {
/**
* Alt + / 自动写代码,类似代码提示
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//加法
int c = add(1,2);
System.out.println(c);
//减法
float d = substract(3, 2);
System.out.println(d);
//乘法
YunSuanFu yunsuanfu = new YunSuanFu(); //不能将静态的方法写在非静态的方法中
// 非静态的变量(动态的类)就要新建一个对象
int e = yunsuanfu.multiply(5, 6);
System.out.println(e);
//除法
float f = yunsuanfu.divide(33.3f, 3.0f);
System.out.println(f);
int h = yunsuanfu.divide(10, 5);
System.out.println("整数的除法" + h);
//取余
long g = yunsuanfu.mod(10, 3);
System.out.println(g);
}
/** 文档注释
* 两个整数相加
* @param a
* @param b
* return */
public static int add(int a,int b) {
int c = a + b;
return c;
}
/** 减法*/
public static float substract(float a,float b) {
float c = a - b;
return c;
}
/** 乘法*/
public int multiply(int a,int b) {
int c = a * b;
return c;
}
/** 除法*/
public float divide(float a,float b) {
return a/b;
}
public int divide(int a,int b) {
return a/b;
}
/** 取余*/
public long mod(long a,long b) {
return a % b;
}
}
运算符
算术运算符
• +,-,*,/的基本使用
%的使用
– %和/的区别
• ++,–
自增自减
int i = 10;
int j = 5;
System.out.println(++i); //++放在前面的时候先加1再做其他运算
System.out.println(j++); //++放在后面的时候先调用它的值再加1
System.out.println(j);
输出结果:
11
5
6
• 字符参与运算
– 其实是拿该字符对应的数值来操作
– ‘a’ 97
– ‘A’ 65
– ‘0’ 48
• 字符串参与运算
– 这里其实做的不是加法运算,而是字符串拼接。
– 字符串和其他类型的数据做拼接,结果是字符串类型的。
-逻辑运算符
• 逻辑运算符用于连接布尔型表达式,在Java中不
可以写成3
• &,|,^,!
• &&,||
– “&”和“&&”的区别:
• 单&时,左边无论真假,右边都进行运算;
• 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
• “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。第一个左边为假判断右边第二个。
键盘录入数据概述
我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性。
如何实现键盘录入数据呢?(目前先记住使用)
导包(位置放到class定义的上面)
import java.util.Scanner;
创建对象
Scanner sc = new Scanner(System.in);
接收数据
int x = sc.nextInt();
核心步骤:
//0.导入包
import java.util.Scanner;
// 1.创建键盘录入的对象
Scanner sc = new Scanner(System.in);
// 2.接收数据
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
练习:
键盘录入两个数据,并对这两个数据求和,输出其结果
键盘录入两个数据,获取这两个数据中的最大值
键盘录入两个数据,比较这两个数据是否相等
键盘录入三个数据,获取这三个数据中的最大值
代码:
package com.demo;
import java.util.Scanner;
/**
* 引入包 CTRL + SHIFT + O
*/
public class ScannerDemo {
public static void main(String[] args) {
// 1.创建键盘录入的对象
Scanner sc = new Scanner(System.in);
// 2.接收数据
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
// 对数据进行求和
int sum = a + b;
System.out.println("sum = " + sum);
// 三元组运算符判断两个数是否相等
boolean flag = ((a == b) ? true : false);
System.out.println("flag:" + flag);
System.out.println("请输入第三个数据:");
int c = sc.nextInt();
int temp = ((a > b) ? a : b);
int max = ((temp > c) ? temp : c);
System.out.println("max: " + max);
}
}
if(关系表达式) {
语句体
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
if语句第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
格式解释
switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是String
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程
A:执行初始化语句
B:执行判断条件语句,看其结果是true还是false
如果是false,循环结束。
如果是true,继续执行。
C:执行循环体语句
D:执行控制条件语句
E:回到B继续
基本格式
while(判断条件语句) {
循环体语句;
}
改版格式
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
do {
循环体语句;
}while((判断条件语句);
改版格式
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
continue的使用场景:
在循环语句中
离开使用场景的存在是没有意义的
continue的作用:
单层循环对比break,然后总结两个的区别
break 退出当前循环
continue 退出本次循环
break的使用场景:
在选择结构switch语句中
在循环语句中
离开使用场景的存在是没有意义的
break的作用:
跳出单层循环
作用:
用于产生一个随机数
使用步骤(和Scanner类似)
导包
import java.util.Random;
创建对象
Random r = new Random();
获取随机数
int number = r.nextInt(10);
//10表示随机数的范围0-10
产生的数据在0到10之间,包括0,不包括10。
Random r = new Random();
int number = r.nextInt(10);
如何获取一个1-100之间的随机数呢?
Random r = new Random();
int number = r.nextInt(10) + 1; //在结果出加1,随机数是默认范围从0开始。
综合练习
猜数字小游戏案例
系统产生一个1-100之间的随机数,请猜出这个数据是多少。
分析:
A:系统产生一个1-100之间的随机数
Random r = new Random();
int number = r.nextInt(100) + 1;
B:键盘录入我们要猜的数据
C:比较这两个数据,用if语句实现
大了:提示大了
小了:提示小了
猜中了:提示恭喜你,猜中了
D:多次猜数据,而我们不知道猜多少次,怎么办呢?
==while(true) {循环体语句;}==表示一直运行。
public class RandomTest {
public static void main(String[] args) {
//系统产生一个1-100之间的随机数
Random r = new Random();
//获取随机数
int number = r.nextInt(100) + 1;
//多次猜数据
while(true) { //while(true)表示一直运行
//键盘录入我们要猜的数据
Scanner sc = new Scanner(System.in);
//接收数据
System.out.println("请输入你要猜的数据(1-100):");
int guessNumber = sc.nextInt();
//比较这两个数据,用if语句实现
if(guessNumber > number) {
System.out.println("你猜的数据"+guessNumber+"大了");
}else if(guessNumber < number) {
System.out.println("你猜的数据"+guessNumber+"小了");
}else {
System.out.println("恭喜你,猜中了");
break; //跳出循环
}
}
}
}
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值的。
数组初始化概述:
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例:
int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
其实这种写法还有一个简化的写法
int[] arr = {1,2,3};
java中的内存分配:
Java 程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈 存储局部变量
堆 存储new出来的东西
方法区 (面向对象进阶讲)
本地方法区 (和系统相关)
寄存器 (给CPU使用)
数组操作的两个常见小问题
1.数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生。
2.空指针异常
NullPointerException
数组引用没有指向对象,却在操作对象中的元素时。
内存图解3:
定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。然后给第二个数组赋值,再次输出两个数组的名及元素。
练习
一维数组遍历:
public class array {
public static void main(String[] args) {
// int[] arr = new int[6];
int[] arr = { 2, 4, 5, 6 };
// int array[3] = {2,4,5,6};
for (int i = 0; i <= 3; i++) {
System.out.println(arr[i]);
}
}
}