JAVA开发学习-day01
1.JAVA语言特点(跨平台性)
一次编译可以在多个平台执行,原因为编译器将java程序编译为字节码文件(.class),各个平台的JVM将字节码文件转化为当前系统指令,就实现了程序运行,所以JAVA可以在多系统中运行(Windows,Linux…)。
2.JDK安装与环境变量配置
JDK java开发工具包 java语言开发环境
JRE java程序运行环境 只需要运行程序时,可以只安装JRE
JVM java程序虚拟机
2.1 下载JDK安装包解压到个人指定目录
2.2 配置环境变量
JAVA_HOME:JDK根路径
Path:系统执行文件所在地址
右键(此电脑)—属性–高级系统设置–环境变量
在环境变量的系统变量中新建JAVA_HOME变量,值为jdk的安装目录
在系统变量的Path中新建%JAVA_HOME%\bin后,将其上移到顶部
点击确认后,再win+R键输入cmd,在命令行中输入java -version,出现如图所示的命令则安装成功。
3.运行程序测试
在D:\easy目录下创建Hello.java文件,在其中输入
public class Hello{
public static void main(String[] args) {
System.out.println("Hello World");
}
}
保存,在当前目录下地址框中输入cmd,在命令行中输入
javac Hello.java
对代码进行编译后,当前目录下出现Hello.class文件,这是个字节码文件,此时再输入
java Hello
如图所示,成功运行
4.安装开发工具IDEA
在官网下载IDEA,并激活使用
5.创建JAVA项目
5.1 新建JAVA项目
在菜单栏中file中的New中选择project进行新项目的创建,输入Name之后即可完成创建
5.2 项目文件定义
src是源文件夹,是编写程序的位置;com.easy是包(包名要求全部小写),包可以更好地组织类,确保代码的可读性,防止类名冲突,便于维护;EasyA是类(类名要求首字母必须大写)
public class EasyE {
public static void main(String[] args) {
}
}
class 类名 类结构
一个.java文件中只能有一个public 外部类
这个public类必须和文件名一样,如EasyE.java中的public class后面必须为EasyE
5.3 标识符
标识符:变量名,类名,方法名,参数名,常量名(起到标识作用,方便以后使用)
标识符命名规范:标识符只能有字母,数字,$和_组成,首字符不能是数字(中文语法上可以,行业内不允许)
标识符不能是关键字, static❌ staticNum √
所有标识符都要见名知意 可以缩写,如果影响到见名知意就不缩写
5.4 关键字
Java的关键字是预定义的,具有特殊含义,不能用作其他目的的标识符。它们在Java编程语言中扮演着重要的角色,如定义类、方法、变量等,以及控制程序的流程和处理异常。
例子:private,class,public,byte,short,int,long,float,double,char,boolean…
5.5 注释
注释分为单行注释,多行注释和文档注释
// 单行注释:两个斜杠,只能作用一行
/*
多行注释: 符号为斜杠,星号,星号,斜杠
注释写在两个星号之间
可以写多行
*/
/**
* 文档注释
* @author ws
* @time 2024.07.14
*/
6.变量常量
6.1 变量
//声明变量
//声明变量的名字和类型
int num;//声明一个整数类型变量num,num只能存储整数类型的值
6.2 常量
//常量:程序运行阶段不可以发生变化的量
//常量名:全部大写
final int MAX_NUM;
MAX_NUM=12;
6.3 初始化和未初始化
int num;//声明一个整数类型变量num num只能存储整数类型的值
num=200;//给变量赋值 初始化:给变量第一次赋值
//未初始化:重来没有给某个变量赋值,未初始化的变量不可使用
int numA;
7.基本数据类型
7.1 基本数据类型
java基本数据类型
整数类型: byte short int long
浮点型: float double
字符型: char
布尔型: boolean
7.2 整数类型
整数类型取值范围 (负数二进制算值要反码加1) 如
byte 1字节 8位 -2^7~ 2^7-1 -128~127
short 2字节 16位 -2^15~ 2^15-1
int 4字节 32位 -2^31~ 2^31-1
long 8字节 64位 -2^63~ 2^63-1
char 2个字节 0-65535 FFFF 只用来表示一个字符
boolean 1或4个字节 true/false 默认值是false(0) 不能进行转换
byte num_type=127;
short num_short=1234;
int num_int=34834298;
long num_long=32489038009L;
7.3 浮点型
float 单精度浮点型 4个字节 取值范围大于int 默认值0.0f
double 双经度浮点型 8个字节 (默认) 取值范围大于long 默认值0.0
float num_float=3.15F;
num_float=(float)12.6;
double num_double=3.0000014;
7.4 字符型
char 2个字节 0-65535 FFFF 只用来表示一个字符
char a = 'a';
char aa = 93;
7.5 布尔型
boolean 1或4个字节 true/false 默认值是false(0) 不能进行转换
boolean b = true;
boolean[] c_arr={true,false};
8.基本数据类型之间的转换
8.1 隐式转换
隐式转换:程序自动完成的转换,通常发生在容量小的数据类型向容量大的数据类型转换时,且不会导致数据丢失或溢出。
取值范围小的整数类型可以自动转换为取值范围大的整数类型
byte numByte = 12;
int numInt = numByte;
整数类型可以自动转换为浮点型,浮点型不能隐式转换为整数类型
numInt = -129;
float numFloat = 12L;
double numDouble = 12L;
numFloat = numInt;
long numLong = 122222222222222222L;
numFloat = numLong;
numDouble = numLong;
8.2 强制转换
强制转换是指通过强制类型转换运算符将一个数据类型转换为另一个数据类型,通常发生在容量大的数据类型向容量小的数据类型转换时,或者需要将对象引用类型转换为其他类型时。
当将一个容量大的数据类型转换为一个容量小的数据类型时,可能会导致数据溢出
numInt = -129;
numByte = (byte)numInt; //超出byte范围
System.out.println(numByte); // 127
long longValue = 2147483648L; // 超出int类型范围
int intValue = (int) longValue; // 强制转换,可能导致溢出
System.out.println(intValue); // 输出为 -2147483648
浮点型强制转化为整数型
numFloat = 12.99f;
numInt = (int)numFloat;
System.out.println(numInt); //输出为12
8.3 整数和字符之间的转换
因为符号在计算机中以整数的形式存储,所以可以给整数类型赋值单个字符
numInt = 'a';
System.out.println(numInt); //输出结果为97
同理数字表示符号,char的取值范围为0~65535,所以可以给char类型的变量赋值整数
char numChar = 65535;
因为char类型是2个字节,16位,由此还可以让char类型的变量表示unicode字符
numChar = '\uFFFF';
8.4 字符转换 转义符
一些特殊字符如果直接写入字符串,可能会导致语法错误或者解释上的起义,所以设计了转义符。
转义符是一种特殊的字符序列,它以反斜杠(\)开头,用于表示那些无法直接输入的或者具有特殊含义的字符。通过转义符,我们可以在字符串或字符常量中插入这些特殊字符,而不会引起语法错误或解释上的歧义。
8.5 进制表示
//二进制
int a = 0B111;
System.out.println(a); //输出结果为7
//八进制
int b = 0111;
System.out.println(b); //输出结果为73
//十六进制
int c = 0x11;
System.out.println(c); //输出结果为17
9.输入输出
9.1 输出
System.out.println(); // ln表示换行,不必须有参数,没有参数时输出回车
System.out.println(12);
System.out.print(12); //必须要有参数,不换行
System.out.print(12);
9.2 输入
Java Scanner 类是 Java 中一个用于读取用户输入的类,它可以从标准输入、文件、字符串等多种输入源中读取数据,并将数据转换为 Java 中的各种数据类型。
Scanner类是属于引用数据类型,引用数据类型与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有相对固定的步骤或格式:
//数据类型 变量名 = new 数据类型();
Scanner scan = new Scanner(System.in);
每种引用数据类型都有其功能,可以调用该类型实例的功能。
Scanner scan = new Scanner(System.in);
//变量名.方法名();
int a = scan.nextInt();
示例:
//扫描器对象
//System.in 输入流 对象
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个整数\\从输入流中读取一个整数
int a = scan.nextInt();
System.out.println("请输入第二个整数:");
int b = scan.nextInt();
System.out.println("两个整数之和是:" + (a+b));
//关闭流
scan.close();
10.运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算数运算符:+,-,*,/,%,++,–
逻辑运算符:&&,&,||,|,!,^
比较运算符:>,>=,<,<=,==
10.1 算数运算符
10.1.1 加法运算符 +
int a = 1;
int b = 2;
int sum = a + b;
System.out.println(sum); //sum值为3
10.1.2 减法运算符 -
int a = 3;
int b = 2;
int sub = a-b;
System.out.println(sub); //sub的值为1
10.1.3 乘法运算符 *
int a = 5;
int b = 6;
int multiply = a*b;
System.out.println(multiply );
10.1.4 除法运算符 /
int a = 10;
int b = 5;
int div = a/b;
System.out.println(div); //div的值为2
如果除法运算符的两个操作数都是整数类型,则计算结果为整数,除数不可以为0,否则会引发异常;如果除法运算符的两个操作数中至少一个是浮点数,则计算结果也是浮点数,此时除数可以为0或0.0,得到的结果是正无穷大或负无穷大。
double a = 1;
double b = 0;
System.out.println(a/b); //输出结果为Infinity Infinity表示无限大,无限小为-Infinity
10.1.5 求余运算符 %
int a = 10;
int b = 3;
int mod = a%b;
System.out.println(mod); //mod 的值为1
求余运算符的结果不一定总是整数。如果求余运算符的两个操作数都是整数,则第二个操作数不能为0(同除法运算规则);如果求余运算符的两个操作数中至少一个是浮点数,则第二个操作数可以是0或0.0,但求余结果是是非数:NaN。
double a = -1;
double b = 0;
System.out.println(a%b); //输出结果为NaN,表示非数字
10.1.6 一元运算符 ++ –
++自加运算符是单目运算符(一元运算符),只有一个操作数。运算符既可以放在操作数的左边也可以放在操作数的右边。如果把++放在左边,则先把操作数加1,然后再运算(前加加);如果把++放在右边,则先运算,然后再把操作数加1(后加加)。
a = 12;
c = a++; //a++ 后加加 先将a的值赋给表达式,a的值再加1
System.out.println("a++结果:" + c); //12
System.out.println("a的值:" + a); //13
c = ++a; //++a 前加加 先a+1,再将a的值赋给表达式
System.out.println("++a:结果" + c); //14
System.out.println("a的值:" + a); //14
变量的值取决于表达式,要注意表达式的值
a = 12;
a = a++;
System.out.println(a); //12
System.out.println(a++); //12
a = ++a;
System.out.println(a); // 14
–自减运算符与自加运算符类似。
自加和自减只能用于操作变量,不能用于操作数值直接量、常量或表达式。例如3–是错误的!
10.2 逻辑运算符
10.2.1 && 和 &
int a = 10;
int b = 4;
//短路与 一个成立,后面的不运行了
if (a > 100 && (b++) <5){}
System.out.println("a < 100 && (b++) <5后b的值为:");
System.out.println(b); //输出结果为4
//逻辑与 所有的都运行
if (a > 100 & (b++) <5){}
System.out.println("a < 100 & (b++) <5后b的值为:");
System.out.println(b); //输出结果为5
10.2.2 ||和|
int a = 10;
int b = 4;
//短路或 一个成立,后面的不运行了
if (a > 0 || (b++) > 4){
System.out.println("a > 0 | (b++) > 4");
System.out.println(b); //输出结果为4
}
//逻辑或 所有的都运行
if (a > 0 | (b++) > 4){
System.out.println("a > 0 | (b++) > 4后b的值为:");
System.out.println(b); //输出结果为5
}
10.2.3 ^
//^表示异或,相同为false,相反为true
Boolean boolean1 = 4 > 5;//false
Boolean boolean2 = 4 > 3;//true
Boolean boolean3 = boolean1 ^ boolean2;//相同为false,不同为true结果应为true
int num1 = 10;// 二进制为:1010
int num2 = 7; //二进制为: 0111
//int num2 = 7; 二进制为: 1101
System.out.println(boolean3);
System.out.println(num1 ^ num2); //相同为0,不相同为1 结果二进制为1101 变成十进制为13
10.2.4 !
boolean bool = false;
System.out.println(!bool); //变为true
System.out.println(!!bool); //又变回false
10.3 比较运算符
//比较运算
// < > >= <= == != 布尔值
System.out.println(12 <= 23); // true
System.out.println(12 >= 13); // false
System.out.println(12 == 23); // false
System.out.println(12 != 13); // true
//==在基本数据类型中比较的值是否一样
System.out.println(12.0 == 12); //true
System.out.println(12.5f == 12.5); //true
num1 ^ num2); //相同为0,不相同为1 结果二进制为1101 变成十进制为13
#### 10.2.4 !
```java
boolean bool = false;
System.out.println(!bool); //变为true
System.out.println(!!bool); //又变回false
10.3 比较运算符
//比较运算
// < > >= <= == != 布尔值
System.out.println(12 <= 23); // true
System.out.println(12 >= 13); // false
System.out.println(12 == 23); // false
System.out.println(12 != 13); // true
//==在基本数据类型中比较的值是否一样
System.out.println(12.0 == 12); //true
System.out.println(12.5f == 12.5); //true