JAVA基础语法归纳>>小白进阶~~java基础语法

>>Java概述
Java语言的发展历史
1991年出现,
1995年正式发布
创始人:James Gosling
出生地:SUN 被Oracle公司在这里插入代码片
最新的JDK的版本:
2020年发布JDK14
Java体系: JavaSE 标准版 java基础,桌面应用开发
JavaEE 企业版 javaweb,网站(京东,丁香医生,企业ERP)
JavaME 微型版 被Android替代
Java文件运行过程
如何在cmd中运行java程序?
步骤
1: win
+r ,输入cmd
步骤
2: 切换盘符 例如:你程序在d盘 D
:回车
步骤
3: 切换目录 cd 目录名称 回车
步骤
4: 先编译java源文件
javac 文件名
.java
步骤
5: 再运行字节码文件
java 类名
JDK&JRE&JVM
JDK Java开发工具集
,包含一系列用于操作java程序,字节码文件的工具,比如编译工具,文档工具,打包
工具等
JRE Java运行时环境
,主要包含的用于支持java程序运行的类库,Java虚拟机
(JVM
)
JVM Java虚拟机
GC 垃圾回收机制
【面试题】为什么Java可以跨平台?
因为Java有JVM,JVM运行的是与平台无关的字节码文件
可以一次编译处处运行,不同的平台都会安装JDK,JDK中
包含虚拟机。
环境变量配置
环境变量,为了告诉其他需要基于java环境运行的软件,jdk所在的路径;以及可以快捷的通过cmd操作java相关的
工具
环境变量配置分为两步
:
1. 配置 JAVA_HOME
:JDK所在的安装路径(默认位置
:C
:\Program Files\Java\jdk1
.8.0_101)
2. 配置 Path:JDK所在的安装路径的bin目录
(默认位置
:%JAVA_HOME
%\bin
)
3. 配置Classpath:配置字节码文件所在地址(JDK5之后,会自动寻找当前目录下的字节码文件,因此不再需要
配置)
Java程序运行原理
java是一门高级语言;是一门跨平台的语言(一次编写,运行在任何支持JVM的操作系统中windows,mac,linux),
集编译和解释为一体,任何一个java文件在执行前都需要经过一个编译的过程,然后再通过JVM执行.
先将Java源文件(.java)编译为字节码文件(.class)
javac HelloWorld.java
通过jvm运行字节码文件(*.class)
java HelloWorld
常见的windows命令
1. 进入指定盘符(进入d盘)
d
:
2. 进入当前盘符的根目录
cd \
3. 列出当前目录下所有资源
dir
4. 进入指定目录
cd 目录名
. 表示当前目录
.. 表示上一级目录
Java程序编写与执行
类的定义
{
入口的声明
(){
//程序的入口,main函数,main方法
public static void main(String
[] args
) {
//系统输出,在命令窗口(控制台)打印一行文本
//执行体
}
}
代码编写基本规范
1. Java程序的最基本单元是
class
2. 一个java文件中只能存在一个
public class
3. 文件名称必须和公共的类名称保持一致
(包括大小写
)
4. 括号成对出现
5. 开始花括号之前保留一个空格
6. 左大括号开始之后的代码,保持缩进
(一般
4个空格
)
7. 一行语句结束之后使用
; (英文半角
)
>>Java基础语法
注释
// 单行注释 ctrl+/
/* 多行注释 ctrl+shift+/ 取消多行注释 ctrl+shift+\ */
/** 文档注释,可以使用javadoc.exe工具生成帮助文档 */
设置类上的注释模板 Code Template

关键字&标识符
关键字(keyword)
Java中有50个关键字
关键字:赋予特殊作用的小写单词
Java中包含一系列用作于特殊用途的英文单词,比如,定义一个类使用:
class ;声明一个方法没有返回值类型使
用:
void ;定义一个软件包使用:
package ;所有的英文单词都是小写的;以上这些在Java中都称之为关键
字。Java中包含的所有关键字如下
:
null
,true,false:严格意义上属于值,不包含在关键字范畴
goto和
const在Java中作为保留关键字,不允许使用

分隔符&标识符
分隔符
一条语句是以分号(
;)结尾的一行代码
一个语句块是以一对花括号(
{})为边界的语句的集合
Java中允许有任意多的空格 ,包括换行
;
标识符
概念:给变量
,类
,方法,包 取名字
要求:
符合阿里编程规约
1. 标识符命名必须遵循见名知意
2. 尽量使用英文单词
(拼音
)作为标识符名称
3. 标识符严格区分大小写
4. 包名称建议全部使用小写英文单词
5. 类名称使用驼峰式
(大驼峰
)写法,首字符大写,如果是多个单词组合而成,每个单词的首字符都大写,中间不
能留空格
6. 变量名和方法名使用驼峰式
(小驼峰
)写法,首字符小写,如果由多个单词组合而成,除第一个单词外,其余的
每个单词首字符大写
注意事项
1. 标识符中不能出现除“_”和“$”之外的其他任何特殊符号
("$","_"可以出现在标识符的任意位置
)
2. 数字只能出现在中间和末尾,不能出现在代码的开头处
3. 空格不能出现在标识符之间
4. 关键字不能作为标识符名称
5. 不要使用JDK中内置的类名称作为标识符名称,可能会导致不可预料的后果
6. 不要使用中文作为标识符名称,可能会导致乱码
安装阿里巴巴编程规约插件

变量(variables)
1. 常量(不可改变的数据值)
常量在Java中一般用于表示某一个特定值,而且该值一旦使用则无法改变,因此称之为常量
1.直接量
2.自定义常量
2. 变量(可以更改的数据)
能储存计算结果或能表示值抽象概念。变量可以通过变量名访问
编程语言中用于描述数据的最基本的单元称之为变量;变量的定义实际就是在向JVM申请内存空间;变量的定
义语法:
数据类型 变量名称
[= 初始值
]
三要素
变量类型 变量名
= 值
;
拆分为
2个步骤:
//声明
数据类型 变量名
;
//赋值
变量名
= 值
;
解释:
1.变量名必须符合标识符命名规范,阿里编程规约变量名采用小驼峰命名法
2.基本数据类型 和 引用数据类型
8个(
byte short int long float double char boolean)
其他都是引用数据类型
(数组,类,接口,枚举
)
3. 值必须匹配数据类型
4. 变量通常是可变的,可以重复赋值
变量的使用位置
在同一个范围内,变量名不能相同
变量的定义可以在一个Java程序的多个位置出现:
1. 类结构中直接定义
2. 方法的参数中定义
3. 方法结构体中定义
4. 其他语句块
(分支,循环,游离快,构造器
)
根据变量的定义位置不同,称呼也存在区别,Java中的变量分为两种:
1. 全局变量
类结构中直接定义的变量称之为全局变量
2. 局部变量
除类结构之外,其他任何地方定义的变量都称之为局部变量

局部变量 和 成员变量 区别
数据类型
在java开发中,大多数时间都是在对数据进行操作,比如
:登录,注册,搜索商品,下订单,转账等。既然是数据,
就有类型之分;不同的数据类型也不同。
java是一门强类型
(弱类型:JavaScript、python
)语言,任何的变量在声明之前都必须显式的指定其数据类型,并
且,在使用过程中数据类型不能够改变。Java中的数据类型分为两个大类:第一类称之为基本数据类型;第二类称
之引用数据类型(面向对象)。
数据类型分类

基本数据类型(8个)
基本类型数据也称之为简单类型,通常用于描述一个基本值,比如说:一个整数,一个字符,一个小数,一个
true、false值等;java中的基本类型数据分为以下四类八种:
整数类型(byte short int long)
浮点类型(float double)
字符类型(char)
布尔类型(boolean)
整数类型

整数类型一般用于表示一个整数(包含正负数),整数类型主要包含4个:
byte(文件操作时常用)
short
int(推荐)
long(时间毫秒数,文件字节数)
注意事项
:
1. java中默认的整数类型是
int
2. 任何整数类型的运算结果都会转换为
int类型
3. 声明
long类型变量时,数据值必须在末尾跟上“L”
计算机基础知识
:
1字节
(byte) = 8位
(bits
) 计算机底层能够识别的只能是
0和
1
0000 0000 ~ 1111 1111
十进制和二进制之间转换
// 若给long类型的变量赋值,值超过了int的取值范围
// 添加L或者l
拓展
:
// byte a2 = (byte) 128; 请问 a2的值为多少?
byte a2
= (byte) 128;
System
.out
.println(a2
); // -128
byte a3
= (byte) 129;
System
.out
.println(a3
); // -127
// 因为值最终都会转换成2进制数
// 十进制数中: 128 = 127 + 1
// 二进制: 127 (0111 1111)
// 1 (0000 0001)
// 1000 0000 如何转换成十进制数?
// 求一个负数的二进制数?
// -7
// 步骤1:先求7的二进制数
// 0000 0111 (原码)
// 步骤2:取反(0的变成1,1的变成0)
// 1111 1000 (反码)
// 步骤3:+1
// 1111 1001 (补码)
// 1000 0000 转换成 十进制
// 步骤1:减1
// 0111 1111
// 步骤2:取反
// 1000 0000
// 步骤3:计算结果128,前面加一个负号
// -128
浮点类型
java中对于小数类型的表示称之为浮点类型,浮点类型包含两种:
float float 保留8位有效的小数
double double保留 16位有效的小数

注意事项;浮点类型的默认值为
0.0
1. java中默认的浮点数类型为
double
2. 表示一个
float类型的数据必须在数值末尾追加“f”或“F”
3. 浮点类型一般用于对精度要求不高的运算中
0
浮点类型的概念源之于科学计数法,比如表示一个大数值
(10045.6)可以按如下方式表示
:
1.00456 * 10^4
10.0456 * 10^3
0.100456 * 10^5
BigDecimal解决精度丢失问题
float与double精度丢失问题
所有的整数转变为二进制数的算法会不会无限循环下去呢?绝对不会,整数永远可以用二进
制精确表示 ,但小数就不一定了。*2永远不可能消灭小数部分,这样算法将无限下去。
很显然,小数的二进制表示有时是不可能精确的
BigDecimal
/ divide
* multiply
- subtract
+ add
x的n次方 pow(int n)
字符类型
Java中对于单个字符提供了一个char类型表述,区别于String类型(String用于表示一个字符串)
char类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
注意事项
:
String不是基本类型数据,是JDK中提供一个引用类型数据
char类型一般用于字符转码
(编码转换
);String的内部实现原理基于
char类型
(String本质上就是一个
char数
组
)
String类型用于表示一个字符串,值必须包含在双引号之间;而
char类型用于表示一个字符,并
且字符包含在单引号之间。
char类型除了可以表示单个英文字符外,还能表示中文字符,特殊符号等:
关于转义符号“\”,java中对于特殊的符号可以使用“\”转义:
\b \t \n \f \r \" \' \\
\n 换行
(LF
) ,将当前位置移到下一行开头
\r回车
(CR
) ,将当前位置移到本行开头
\t水平制表
(HT
) (跳到下一个TAB位置)
\\代表一个反斜线字符\
\' 代表一个单引号(撇号)字符
布尔类型
布尔类型通常用于表示
true或者
false值,只占一个二进制位;因此布尔的取值只能是
0和
1;但是Java中只允许用
true和
false表示
boolean的值。布尔类型一般用于一些逻辑判断中,比如条件分支,循环的判断。
数据类型转换

在实际的项目经常会涉及到许多不同的基本类型数据的交替使用,因此,不同的基本数据类型之间会涉及到一些转
换需求;java中基本类型数据的转换遵循以下原则:
小转大,直接转 自动类型转换
byte -> int
char -> int
int -> double
大转小,需强转 强制类型转换
int -> char
double -> long
long -> byte
//强制类型转换(在需要被转换的变量或者值之前使用小括号,括号中写入需要转换成为的目标数据类型的类型名
称
)
引用数据类型(自定义类型)
之前所有的基本类型数据都是用于表示一个简单的值,比如
:一个整数,一个字符,一个小数,一个
true、
false
值;如果需要表示一个人,一只狗或者一条订单信息;对于以上复杂的数据来说,单纯使用一个基本类型的数据无
法全面表示;
所以,对于以上的需求无法通过一个基本类型数据来表示,因此,java中针对一些复杂的数据还提供了一种特殊的
数据类型
-----引用数据类型
引用类型的呈现方式通常以一个类的形式存在,这里就涉及到了java中面向对象程序设计。java中的引用类型包含
以下三类
:
1. 类的引用
2. 数组的引用
3. 接口的引用
数据类型强化问题
1、
short s1
= 1; s1
= s1
+ 1;有什么错
? short s1
= 1; s1
+=1;有什么错
?
回答: 前面表达式有错误,s1
+1中
1是
int类型,右边的结果为
int
int赋值给s1,s1为
short,需要强制类型转换
s1
= (short)(s1
+1);
后面的表达式没有错误,因为
+=这种扩展赋值运算符会自动类型转换
2、
char类型变量能不能储存一个中文的汉子,为什么?
回答:
char是
2个字节
16位,所以可以使用unicode编码表示
只要是在unicode编码中文范围的汉字都可以存储
4E00-9FA5
但是也有特殊情况生僻字不能存储
3、Integer和
int的区别
回答:
int 基本数据类型,只能用于算术运算,位运算
Integer引用数据类型,类提供很多方法去便捷操作一些
int值
例如:
10进制数转
2进制数的方法
4、能否在不进行强制转换的情况下将一个
double 值赋值给
long 类型的变量?
回答:不可以,虽然
double 和
long 都是
8个字节
(64位
),但是底层的存储
结构不一样,
double表示的范围
> long表示的范围
所以把
double值赋值给
long需要强制类型转换
5、java 中
3*0.1 == 0.3 将会返回什么?
true 还是
false?
回答:java中
float和
double,在做运算的时候,会有精度丢失
所以这个表达式的值为
false
6、java 中
float f
= 3.4; 是否正确?
回答:
3.4默认为
double类型,若需要强制将
3.4赋值给
float需要强制类型转换
也有其他解决方案。
解决方案
1:
3.4后面添加小f或者大F
float f
= 3.4F;
解决方案
2: 变量f的数据类型,改为
double double f
= 3.4;
解决方案
3: 使用造型符号,强制类型转换
float f
= (float) 3.4;
运算符
Java中提供了大量的用于操作数据的运算符号,这些运算符号分为以下几类:
算术运算符
关系运算
布尔逻辑运算
位运算符
三目运算
其他(扩展赋值,字符串拼接,赋值,造型)
算术运算符
算术运算符主要用于对基本类型的数据(整数,小数)进行类似加减乘除等算术运算;二元运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ph3CUxWi-1607152233139)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1607150720349.png)]
+ 加法 ― 减法
* 乘法
/ 除法
% 求余数
++ 自增 ―― 自减
++a 和 a
++的区别
++a 先
+1,再给表达式(
++a)赋值
a
++ 先给表达式(a
++)赋值,再
+1
不论a
++还是
++a,都是对a进行
+1操作
算术运算注意事项
:
1. 任何整数类型进行算术运算都会将结果转换为
int类型
2. 任何数值类型跟浮点进行算术运算都会转换为
double类型
关系运算符
关系运算一般用于对于基本类型数据的大小比较,等于比较,另外也可以对两个引用类型对象的地址进行比较,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FBdgzcRT-1607152233140)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1607150849421.png)]
1. 关系运算符,结果为
boolean类型
2. > 大于
= 大于等于
> 右移运算符
> 无符号右移运算符
1. 需要将值,转换成二进制数再运算
2. 特点,
~ 1变
0 0变
1
& 有
0则为
0
| 有
1则为
1
^ 相同为
0 不同为
1
3. 运算符优先级从高到低
~ & ^ |
m
>>n m向右移动n位
步骤:先将m转换成二进制数,二进制数向右移动n位,等价于除以n个
2
m
=,
>=
三目运算
三目运算符也称之三元运算,运算符具备逻辑判断的功能,语法:
数据类型 变量名
= 逻辑表达式
?值
1:值
2;
解释: 逻辑表达式的值为
true,则把值
1赋值给变量
否则把值
2赋值给变量
复杂的三目运算使用
:
//输入一个分数(0~100),根据该分数所在的区间显示分数对应的等级(ABCDE)
//
Scanner sc
= new Scanner(System
.in
);
//获取控制台输入的整数
int i
= sc
.nextInt();
}
Math类与随机数使用
java中提供了一个Math类,是一个工具类,内部主要包含的是一些工具方法,比如,求两数的最大值,最小值,
绝对值,四舍五入,随机数;这些所有的方法都可以直接通过类名称调用。
//随机获取从0.0~1.0(不包含)之间浮点数
//0.000000~0.999999
//0~9.999999 + 1
double d
= Math
.random();
System
.out
.println(d
);
//随机1~10之间的整数?
int i
= (int)(Math
.random() * 10) + 1;
System
.out
.println(i
);
//随机从[0,10]之间的整数 开闭区间 0.99 * 11
i
= (int)(Math
.random() * 11);
System
.out
.println(i
);
//随机获取从[5,10]之间的值?
i
= (int)(Math
.random() * 6) + 5;
System
.out
.println(i
);
main(String[] args){
Scanner sc = new Scanner(System.in);
//获取控制台输入的整数
int i = sc.nextInt();
}
#### Math类与随机数使用
java中提供了一个Math类,是一个工具类,内部主要包含的是一些工具方法,比如,求两数的最大值,最小值,
绝对值,四舍五入,随机数;这些所有的方法都可以直接通过类名称调用。
```java
//随机获取从0.0~1.0(不包含)之间浮点数
//0.000000~0.999999
//0~9.999999 + 1
double d = Math.random();
System.out.println(d);
//随机1~10之间的整数?
int i = (int)(Math.random() * 10) + 1;
System.out.println(i);
//随机从[0,10]之间的整数 开闭区间 0.99 * 11
i = (int)(Math.random() * 11);
System.out.println(i);
//随机获取从[5,10]之间的值?
i = (int)(Math.random() * 6) + 5;
System.out.println(i);