前言、Java介绍与运行
1、Java特点
(1)面向对象:
区别于面向过程,以类(class)为基础,类中包含属性与调整属性的方法(method),java是强面向对象的,每个程序都是基于类的结构。
(2)包机制(package)
一组相互联系的类型(类、接口、枚举和注释),对这些类型提供访问保护和命名空间管理的功能。常用的包包括:
- java.applet:实现运行于Internet浏览器中的JAVA APPLET的工具类库。
- java.awt:用来构建图形用户界面(GUI)的类库,包括图形类、组成类、容器类、排列类、几何类、事件类和工具类等。
- java.io:提供了一系列用来读写文件或其他的输入输出流。
- java.lang:最重要,提供了JAVA语言的核心类库,包含了运行JAVA程序必不可少的系统类,如:基本数据类型、基本数学函数、字符串处理、线程管理和异常处理类等。运行JAVA程序时,系统会自动加载java.lang包,这个包的加载是默认的
- java.math:数学方面操作的类
- java.net:包含一些与网络相关的类和接口,如主机名解析类、实现套接字通信的Socket类和ServerSocket类、资源定位器(URL)类等
- java.sql:提供了对数据库进行操作的类
- java.time包是在JDK8新引入的,提供了用于日期、时间、实例和周期的主要类
- java.util提供了一些实用工具,如数据结构类、日期类、随机数类、属性类、观测类和异常类等
(https://blog.csdn.net/qq_36119192/article/details/85066064)
在项目中,利用maven完成各种包的管理
(3)支持分布式、多线程
- java是分布式语言,可以用于网络编程与分布式架构的客户机与服务器。
- java是多线程语言,它提供支持多线程的执行,如java.lang中的Thread类。
(4)存储分配模型
java没有指针,无法通过指针指向存储器,编译程序不处理存储安排,在运行时由Java解释程序决定实际存储地址。try/catch/finally用于异常处理。
(5)编译与运行
javac程序实现编译,可以基于hello.java生成hello.class文件,java实现解释与执行。
- 第一个程序 HelloWorld
// 第一行的第三个单词必须和所在的文件名称完全一样,大小写也要一样
// public class 后面代表定义一个类的名称,类是java当中所有源代码的基本组织单位
public class HelloWorld {
// 第二行的内容是万年不变的固定写法,代表main方法
// 第一行代表程序执行的起点
public static void main(String[] args) {
// 第三行代表打印输出语句(其实就是屏幕显示)
// 希望显示什么东西,就在小括号里面写什么
System.out.println("Hello,World!!!");
}
}
注意:HelloWorld.java中的文件名要与public class后面类名称的一样。
(6)Java开发环境搭建
JVM:翻译程序成对应系统的语言
JRE:运行时的环境
JDK:java程序开发工具包
(7)Java开发工具
首选 IntelliJ IDEA 搭配maven包管理工具,vscode备选。
一、数据类型、变量与常量
1、关键字
java自带的保留字,不能用于常量、变量、和任何标识符的名称,比如public、import、byte、int等java自带的。关键字完全小写,且在在Notepad++等编辑器中显示为特殊颜色。
2、标识符
(1)命名规则:硬性要求
- 标识符可以包含英文字母26个(区分大小写)、0-9数字、$(美元符号)和 _(下划线)
- 标识符不能以数字开头
- 标识符不能是关键字
(2)命名规范:软性建议
- 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式) HelloWorld
- 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式) a
- 方法名规范:同变量名 updata()
3、常用数据类型
(1)整数型:byte short int long
- 如100、200
- byte范围为-2^7 到 2^7-1 即-128~127
- short范围为-2^15 到 2^15-1 即-32768~32767
- 整数默认int型,long类型需要加后缀L
(2)浮点型:loat和double
- 有小数点,如2.5
- 浮点型可能只是一个近似值,并非精确的值
- 浮点数默认类型是double,如果一定要使用float类型,需要加上一个后缀F
- float是单精度、32位,double双精度、64 位
- 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节, long是8字节
(3)字符型:char
- 如‘a’、‘中’
- 16 位 Unicode 字符,最小值\u0000 -> 0(十进制),最大值是 \uffff -> 65535
(4)布尔型:boolen
- true 、false,默认false
(5)引用数据类型:字符串、数组、类、接口、Lambda
4、常量
以下是常量的例子
public class Demo01Const {
public static void main(String[] args) {
// 字符串常量
System.out.println("ABC");
System.out.println("");// ""之间没东西,这样表示空值
System.out.println("XYZ");
// 整数常量
System.out.println(30);
System.out.println(-500);
// 浮点数
System.out.println(3.14);
System.out.println(-2.5);
// 字符常量
System.out.println('A');
System.out.println('6');
// System.out.println('') //''之间不能没有字符,要不然报错,为空值
// System.out.println('AB') //''之间不能没有字符,要不然报错,为空值
// 布尔常量
System.out.println(true);
System.out.println(false);
// 空常量不能直接打印
// System.out.println(null);
}
}
(1)字面量:通常赋值给变量,运行期间不能改变
整数型常量可以用十进制、16进制以及8进制表示:
- 100:十进制
- 0111:8进制,前缀为0
- 0x86:16进制,前缀0x
字符串常量和字符常量可以包含任何Unicode字符
- 字符 '\u0001'
- 字符串 "\u0001"
(2)final关键字:
对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。
final double PI = 3.1415927;
final double YEAR = 2021;
5、枚举类型
枚举为一个可能取值的集合,可以为null
enum City {Chenggdu, Chongqing, Hangzhou};
# 城市集合
City c = City.Chenggdu;
6、变量
变量是程序运行期间,内容可以发生改变的量。
(1)创建一个变量并且使用的格式
数据类型 变量名称; // 创建了一个变量
变量名称 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量
或者
数据类型 变量名称 = 数据值; //在创建一个变量的同时,立刻放入指定的数据值
以下是案例:
public class Demo02Variable{
public static void main(String[] args){
int num1;
num1=10;
System.out.println(num1);
num1=20;
System.out.println(num1);
int num2=25;
System.out.println(num2);
num2=35;
System.out.println(num2);
System.out.println("***************");
byte num3=30;//如果为400,则会超范围
System.out.println(num3);
short num5=50;
System.out.println(num5);
long num6=30000000L;
System.out.println(num6);
float num7=2.5F;
System.out.println(num7);
double num8=1.2;
System.out.println(num8);
char zifu1='A';
System.out.println(zifu1);
zifu1='中';
System.out.println(zifu1);
boolean var1=true;
System.out.println(var1);
var1=false;
System.out.println(var1);
boolean var2=var1;
System.out.println(var2);
}
}
注意事项:
- 如果创建多个变量,那么变量之间的名称不可以重复
- 对于float和1ong类型来说,字母后缀F和L不要丢掉
- 使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围
- 沒有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。
(2)变量类别
public class type{
static int all_var; // 类变量
int a=1; // 实例变量
public void test(){
int local_var =0; // 局部变量
}
}
- 类变量,带static修饰,属于类,所有实例共享同一个类变量
- 实例变量,每一个类的实例都有只属于自己的那一份
- 局部变量,方法内的变量
(3)数据类型转换
1)自动类型转换(隐式)
自动完成,为了不产生精度丢失,规则为数据范围从小到大,如int 到long
public class Demo01DataType {
public static void main(String[] args){
System.out.println(1024);//整数,默认int类型
System.out.println(3.14);//浮点数,默认double
long num1=100;
System.out.println(num1);//100
double num2=2.5F;//2.5
System.out.println(num2);
float num3=30L;//30.0
System.out.println(num3);
}
}
以下是精度丢失的案例:
int n = 123456789;
float f = n;
System.out.println(f);//1.23456792E8
2)强制类型转换(显式)
需要特殊格式处理,不能自动处理,格式为
范围小的类型 范围小的变量名 =(范围小的类型)原本范围大的数据
不推荐使用 易造成精度损失、数据溢出
案例1:数据溢出
数据溢出 int无法显示6000000000
案例2:精度损失
double x = 9.997;
int nx = (int)x; //nx为9
// int nx = (int) Math.round(x); //nx为10
强制转换通过截断小数部分将浮点值转换为整型,Math.round()方相当于四舍五入,寻找最接近的整数。
3)byte/short/char之间的运算
byte/short/char运算时首选变为int类型,然后再计算,字符会被翻译成二进制。
案例1:char 与 int
char zifu1 ='A';
System.out.printin (zifu1+1); //结果为66
案例2:byte/short/char之间的运算
byte num4=40;
byte num5=50;
int result1=num4+num5;//byte+byte-->int+int-->int
System.out.println(result1);//90
short num6=60;
short result2 =(short)(num4+num6);
System.out.println(result2);//100
注意:boolean类型不能转化