Java学习笔记
Java入门
JDK的下载和安装
1.打开www.oracle.com,点击Products,找到Java,下载,选择JDK版本
2.安装,注意安装路径不要出现中文、空格和之类的特殊符号
环境变量
1.复制 JDK文件的路径
2.保存到环境变量中(新建系统变量,变量名设置JAVA_HOME,变量值设置JDK所在目录,不是bin目录,接着path添加 JDK下bin目录的地址)
IDEA下载和安装
1.打开www.jetbrains.com.cn,点击开发者工具,找到 Intellij IDEA Ultimate,打开,选择版本下载
2.安装路径不要含中文、空格、特殊字符
IDEA的基本使用
1.新建项目

给项目取一个合适的英文名,然后选择保存位置,选择JDK版本,将添加示例代码选项取消勾选,点击创建即可。
2.新建包

右键src,选择New,选择Package,然后给New Package取一个名字
一般的企业办公写的是企业域名反写,也就是cn.edu.qit.xg这种形式,后面再去加包的作用
用cn.edu.qit.xg这种形式写的这个包属于多级包,在本地打开查看分级下来是,文件夹src——>cn——>edu——>qit——>xg,因此可知,包的命名里是用 . 来分隔的
3.新建java文件
右键包,选择New,右边点击java.class,创建java文件
IDEA的基本设置
1.汉化
点击File,点击Settings,找到 Plugins,这个是插件,然后搜索chinese ,添加汉化包
2.主题
点击Appearance,Theme处直接调
3.字体
跟主题一个界面,往下看
4.取消提示的大小写限制


5.安装AI插件(随便你,不装就不装)
插件搜索tongyi,下载阿里通义千问的AI插件

或者搜索marscode,下载字节跳动Trace的插件

自选看爱好
注释(不影响程序运行)
1.单行注释
//注释信息
快捷键:ctrl + /
2.多行注释
/* 注释信息
注释信息 */
快捷键:选中需要注释的文本,ctrl + shift + /
HelloWorld
//class:表示定义一个类,类是java项目中最基本的组成单元
//HelloWorld:类的名字
//{ }:表示类的范围,所有的代码都需要写在这个大括号里面
public class HelloWorld{
//表示java程序的主入口,当程序开始运行的时候,会从主入口开始逐行往下执行
//是一个固定的格式
public static void main(String[] args){
//输出语句
System.out.println("HelloWorld");
}
}
Java语法篇
关键字
class
定义一个类,
比如前面的HelloWorld,public class HelloWorld就是创建一个类,这个类叫做HelloWorld,而HelloWorld被称为类名。
package
表示当前的类定义在那个包下,不需要我们自己写,是IDEA自动生成的
例如
package com.qq
java语法
字面量
程序中的数据
| 字面量类型 | 说明 | 举例 |
|---|---|---|
| 数字 | ||
| 1.整数类型 | 直接写 | 18,-88 |
| 2.小数类型 | 直接写,加上小数点 | 1.93,-5.21 |
| 文本 | ||
| 1.字符串类型 | 用双引号 引起来 | “尼古拉斯.咸.鱼”,“123”,“男”,“女” |
| 2.字符类型 | 用单引号引起来的,内容只能有一个 | ‘男’,‘1’,‘A’ |
| 其他 | ||
| 1.布尔类型 | 布尔值,表示真假 | true,false |
| 2.空类型 | 一个特殊的值,空值 | null |
变量
是存储数据的小空间,程序执行过程中可以改变其值的存储单元
定义格式
//数据类型 变量名 = 数据值
int a = 10;
// a :为小空间其的名字
//10 :存在空间里面的数值
// ; :代表语句的结束
// = :代表赋值,将值10赋值给a
//数据类型:int 为空间中存储的数据,加入类型限制,比如这个变量只能赋值【整数】等
使用变量
1.输出打印
2.参与计算
3.修改记录的值
使用场景
某个数据经常发生改变
注意事项
1.变量只能存一个值
int a=10;//先给a赋值10
a=20;//此时a的值为20,而不再是10了
2.变量名不准重复定义
3.变量在使用前一定要进行赋值
4.一条语句可以定义多个变量,也可以连续赋值
int a,b,c,d;//连续定义
a=b=c=d=10;//连续赋值
计算机的存储规则
二进制
这个自己简单了解一下就好了,就是只有0和1,逢二进一
- 在计算机中,任意数据都是以二进制的形式来存储的
- 在计算机中,不同类型的数据有不同的存储单元
🌰:
int a=10; //计算机会先把10这个十进制数转换为二进制数1010
//然后补全为00000000 00000000 00000000 00001010
计算机的存储单元
bit 比特,8比特 = 1字节
字节是计算机中最小的存储单元

int 的底层逻辑通常占4个字节,也就是32个比特位
所以int a=10后才会出现以上补0的情况
数据类型
- 整数
short、byte、int、long
| 整数 | 取值范围 | 内存 |
|---|---|---|
| byte | -128~127 | 1字节 |
| short | -32768~32767 | 2字节 |
| int | -2147483648~2147483647 | 4字节 |
| long | -9223372036854775808~9223372036854775807 | 8字节 |
- 浮点数(小数)
float、double
| 浮点数 | 取值范围 | 内存 |
|---|---|---|
| float | -3.402 * 10^38~3.402 * 10^38 | 4 |
| double | -1.797 * 10^308~1.797 * 10^308 | 8 |
- 字符
char
占2个字节。用 ‘ ’ 单引号括起来
- 布尔
boolean
占1个字节。只有true / false两个值
//1.定义byte类型的变量
byte b=10;
//2.定义short类型的变量
short s=32767;
//3.定义int类型的变量
int a= 200;
//4.定义long类型的变量
long x=10000000000000L;
//long类型数据必须以L结尾,可以是大写,也可以是小写,但是建议大写,因为小写l跟1有点像,容易弄混
//5.浮点数类型的变量
float f=1.1F;
double d=2.2;
//注意:float类型数据必须以f或者F结尾
//6.定义字符类型
char c='中';
//7.定义布尔类型
boolean n=false;
计算小练习
计算你的BMI
public class Demo1{
public static void main(String[] args){
double weight = 56.5;
double height = 1.70;
double BMI = weight / (height*height);
System.out.println(BMI);
}
}
标识符
标识符的命名规则
——硬性要求
1.由数字、字母、下划线 _ 、美元符号$组成
2.不能以数字开头
3.不能是关键字
4.区分大小写
标识符:代码中所有我们自己起的名字
比如,类名、变量名、方法名
——软性建议
见名知意,驼峰命名
见名知意

驼峰命名

键盘录入
也就是获取输入
通过Scanner
//确定Scanner的位置
import java.util.Scanner;
public class VariableDemo6{
public static void main(String[] args){
/*
第一步:找到Scanner这个打工人
第二步:让Scanner干活
*/
Scanner sc = new Scanner(System.in);
//接收键盘录入的整数
int num = sc.nextInt();
System.out.println(num);
//接收键盘录入的小数
double num2 = sc.nextDouble();
System.out.println(num2);
//接收键盘录入的文本(字符串)
String str = sc.next();
System.out.println(str);
}
}
练习:键盘输入并求和
定义两个整数类型的变量num1和num2,键盘录入数据分别为两个变量赋值。
求两个数的和并进行打印
import java.util.Scanner;
public class qiuhe1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
int result = num1 + num2;
System.out.println(两数之和为+result);
}
}
练习:计算BMI
键盘录入你的身高和体重,计算BMI
BMI身体质量指数计算公式:BMI=体重➗️身高^2(体重单位:kg,身高单位:米)
import java.util.Scanner;
public class BMI2{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//键盘录入体重
System.out.println("请输入你的体重:");
double weight = sc.nextDouble();
//录取身高
System.out.println("请输入你的身高:");
double height = sc.nextDouble();
//计算结果并输出
double bmi = weight / (height * height);
System.out.println(bmi);
}
}
运算符
我们平时常见的运算符有加减乘除、大于小于等于、而且、或者等等
而Java:
算术运算符
自增自减运算符
赋值运算符
关系运算符
逻辑运算符
三元运算符
运算符优先级
算术运算符
+加法
-减法
*乘法
/除法
%取余
public class OperatorDemo1{
public static void main(String[] args){
//1.整数运算
//细节:整数相除结果还是整数,就是商
// 其他运算跟数学中是一模一样的
int a = 10;
int b = 3;
System.out.println(a + b);//13
System.out.println(a - b);//7
System.out.println(a * b);//30
System.out.println(a / b);//实际结果是3,但是10/3按道理来说应该是几呢?
System.out.println(a % b);//1
System.out.println("-------------------")
//2.小数计算
//细节:
//小数直接参与计算,结果是有可能不精确的
double c = 10.0;
double d = 3.0;
System.out.println(c + d);//13.0
System.out.println(c - d);//7.0
System.out.println(c * d);//30.0
System.out.println(c / d);//实际结果是3.3333333333333335,但是按道理来说应该是多少呢?
System.out.println(c % d);//1.0
}
}
练习:数值拆分
需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

import java.util.Scanner;
public class caifen {
public static void main(String[] args) {
/*
需求:键盘录入一个三位数,将其拆分成为个位、十位、百位后,打印在控制台
*/
//1.键盘输入一个三位数
//如果是AI自动生成的下面代码,需要点击Scanner,alt + 回车(修正错误),选择第一个import即可
Scanner sc = new Scanner(System.in);
//alt + p:强制让AI自动生成代码
System.out.println("请输入整数:");
int a = sc.nextInt();
//2.将整数拆分成为个位、十位、百位
//获取个位
int b = a % 10;
if (b != 0) {
System.out.println(b);
}
//获取十位
int c = a / 10 % 10;
if (c != 0) {
System.out.println(c);
}
//获取百位
int d = a / 100 % 10;
if (d != 0) {
System.out.println(d);
}
}
}

练习:时间转换
描述
给定秒数 seconds,将其转换为对应的小时数、分钟数和秒数,使得总时间不变,但分钟数和秒数都不超过59. 输入描述: 在一行中输入一个整数 seconds,表示要转换的秒数,满足(0< =seconds <= 10^8)。
输出描述: 一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。

import java.util.Scanner;
public class shijian{
public static void main(String[] args){
//1.键盘输入一个时间
Scanner sc = new Scanner(System.in);
System.out.println("请输入时间(秒数):");
int seconds = sc.nextInt();
//2.计算时间
int hour = seconds / 3600;
int minute = seconds % 3600 / 60;
int second = seconds % 3600 % 60;
//3.输出时间
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
System.out.println(hour + "时" + minute + "分" + second + "秒");
sc.close();
}
}
算数运算符的三种情况
类型转换
数字运算
类型不一样不能运算,需要转成同类型的才能计算

1.隐式转换(从小到大)
前面补0
byte:56 对应二进制数00111000
如果转short:56 对应二进制数00000000 00111000
如果转int:56 对应二进制数00000000 00000000 00000000 00111000
转long:56 对应二进制数00000000 00000000 00000000 00000000 00000000 00000000 00000000 00111000
触发时机:不同类型的数据进行计算,默认采取隐式转换,java自动转换,不用我们写代码
转换步骤:1.如有byte short类型的数据,先提升为int类型
2.把取值范围小的提升为取值范围大的,再进行计算
//例如如下
byte a = 10;
byte b = 20;
int c = a + b;
2.强制转换(从大到小)
去掉前面不要的
int:56 对应二进制数00000000 00000000 00000000 00111000
转换为byte:56 对应二进制数00111000
那么强制转换有没有可能出问题?
有的有的
弊端就是:有可能导致精度丢失
比如int:252645121
对应二进制数:00001111 00001111 00001111 00000001
假如强制转换,那前面三个字节丢失,不就成了00000001,也就是十进制数——1???
也就是因为这些原因,导致如下结果
触发时机:强制转换不会自动触发,需要手动书写代码
书写格式:目标数据类型 变量名 = (目标数据类型)被强制转换的数据;
例如:对值强制转换
int a = 10;
byte b = (byte)a;
对计算的结果强制转换
byte a = 10;
byte b = 20;
//根据上面学的隐式转换,可以知道,在对a和b求和这个过程,两者计算的值由于隐式转换,变成了int类型,所以我们需要对它们的和这个整体进行强制类型转换
byte c = (byte)(a + b);
练习:
public class try1{
public static void main(String[] args){
//练习一:
byte b = 100;
short s = 200;
double d = 20.3;
//请说出下面代码在计算的时候,类型转换的情况
/*
1.b+s
先把byte类型的100,和short类型的200提升为int类型
结果:300(int)
2.300(int)+d
int类型的300会提升为double类型,变成300.0
结果:320.3(double)
*/
double result1 = b + s + d;
System.out.println(result1);//320.3
//练习二:
//检查下面代码,程序运行的时候是否会报错,如果会,请说明错误原因
short s1 = 100;
short s2 = 200;
//int + int = int
//修改方案1:
/*
300:二进制 00000000 00000000 00000001 00101100
强制转换byte:00101100(44)
*/
byte result2 = (byte)(s1 + s2);
System.out.println(result2);
//修改方案2:
int result3 = s1 + s2;
System.out.println(result3);
}
}
字符运算
char a = 'A';
int b = 1;
System.out.println(a + b);
//你觉得会输出什么?
//根据ASCll码表,字符'A'对应65
练习:大小写转换
实现字母的大小写转换,将大写字母转换为小写字母
public class daxiaoxie{
public static void main(String[] args){
//实现字母的大小写转换,将大写字母转化为小写字母
//A——>a
char a = 'A';
//a对应的ASCll码值是97,那么可知大小写字母的差值是32
char aa = (char)(a + 32);
System.out.println(aa);
}
}
字符串运算
字符串只有+操作,没有其他操作
任意数据+字符串都是拼接操作,并产生一个新的字符串

自增自减运算符
符号:++ 变量的值+1
– 变量的值-1
int a = 10;
a++;//等同于 a = a + 1;
++a;
--a;
a--;
a--;
System.out.println(a);//9
赋值运算符

关系运算符

练习:关系运算符的使用
练习1:键盘录入你和你的好朋友的身高,比一比谁更高
import java.util.Scanner;
public class compare {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的身高:");
double myHeight = sc.nextDouble();
System.out.println("请输入朋友的身高:");
double friendHeight = sc.nextDouble();
//方法一:
if(myHeight == friendHeight){
System.out.println("你和朋友的身高相等");
}else if(myHeight > friendHeight){
System.out.println("你比朋友高");
}else{
System.out.println("你比朋友矮");
}
//方法二:
boolean result = myHeight >= friendHeight;
System.out.println(result);
}
}
练习2:键盘录入一个3位数,判断是否能被3整除
import java.util.Scanner;
public class by3 {
public static void main(String[] args) {
//键盘录入一个三位数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int num = sc.nextInt();
//判断该数能否被3整除
//方法一:
if(num % 3 == 0){
System.out.println("该数能被3整除");
}else{
System.out.println("该数不能被3整除");
}
//方法二:
boolean result = num % 3 == 0;
System.out.println(result);
}
}
逻辑运算符
逻辑与、逻辑或、逻辑非
也就是熟知的,而且、或者、取反

练习:逻辑运算符的使用
练习1:键盘录入一个整数,判断这个数字是否在1~10之间
import java.util.Scanner;
public class panduan1 {
public static void main(String[] args) {
//键盘录入一个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = sc.nextInt();
//判断该数是否在1~10之间
if(num >1 && num <10){
System.out.println("该数在1~10之间");
}else{
System.out.println("该数不在1~10之间");
}
//方法二:
boolean result = num > 1 && num < 10;
System.out.println(result);
}
}
练习2:键盘录入一个整数,判断这个数字是否不在1~10之间
import java.util.Scanner;
public class panduan2 {
public static void main(String[] args) {
//键盘录入一个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = sc.nextInt();
//判断该数是否不在1~10之间
//方法一:
if(num <= 1 || num >= 10){
System.out.println("该数不在1~10之间");
}else{
System.out.println("该数在1~10之间");
}
//方法二:
boolean result = num <= 1 || num >= 10;
System.out.println(result);
}
}
逻辑运算符应用场景
需要同时满足条件

扫码登入或账号密码登入。二选一。or

三元运算符
需求:键盘录入两个整数,获取其中的较大值
三元运算符格式:
关系表达式?表达式1:表达式2;
计算规则:

int a = 键盘录入;
int b = 键盘录入;
方式一:int max = a > b ? a : b;
方式二:System.out.println(a > b ? a : b);
练习
import java.util.Scanner;
public class panduan3 {
public static void main(String[] args) {
//键盘录入两个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = sc.nextInt();
System.out.println("请输入另一个整数:");
int num2 = sc.nextInt();
//方式一:
int max = num > num2 ? num : num2;
System.out.println("两个数中的最大值是:" + max);
//方式二:
/*num > num2 ? num : num2;
System.out.println(num > num2 ? num : num2);
*/
}
}
运算符的优先级

