JavaSE之基础语法知识点总结
前言
本文主要内容有计算机基础、Java语言概述与环境搭建、Java语法基础、Java中的运算符、流程控制语句等。
一、计算机基础
1.计算机
由软件和硬件组成。
2.硬件
由cpu、主板、内存、电源、显示器等部件组成。
3.软件
系统软件:有DOS,windows,Linux,Mac… IOS,Android等;
应用软件:QQ,办公软件等。
4.软件的结构划分
C/S结构:Client-Server :客户端和服务器端的交互。
B/S结构:Browser-Server:浏览器端和服务器端的交互。
5.常用的Dos命令
作用 | 格式 |
---|---|
盘符切换 | 盘符号: |
当前目录下文件的详情信息 | dir |
创建文件夹/目录 | md 文件夹/目录的名称 |
切换目录名称 | cd 文件夹名称 |
回退上一级目录 | cd … |
进入多级目录 | cd 目标目录 |
多级目录回退到根目录 | cd \ |
清屏 | cls |
删除目录 | rd 文件夹名称 |
查看本地ip地址 | ipconfig |
查看本机与其他计算机的通信 | ping ip |
创建文件 | copy con 文件名称 |
删除带内容的目录(询问) | rd /s |
暴力删除(不询问) | rd /s /q 目录名称 |
删除单个文件 | del 文件名称 |
批量删除带某一后缀名的文件 | del *.txt |
6.进制的组成规则
二进制:由0、1组成,以0b开头。
八进制:由0、1、2、3、4、5、6、7组成,以0开头。
十进制:由0、1、2、3、4、5、6、7、8、9组成。
十六进制:由0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f组成,以0x开头。
7.进制转换
(1)某一进制转十进制
位权展开法:每个位系数乘以基数的权次幂相加。
系数:每个位上的数据值本身。
基数:X进制转到十进制,X为基数。
权值:从右边开始,并且从0开始编号,给基数进行编号(0,1,2,3,4…)。
举例:
0b100
100
=1*2^2+0*2^1+0*2^0
=4
(2)十进制转到某一进制
用当前十进制数据除以基数,一直除到商为0,余数反转得到相应进制数。
举例:
52转为八进制
52除8等于6余4
6除8等于0余6
将余数倒序排列结果为:064
二、Java语言概述与环境搭建
1.软件开发
需要借助一些工具:输入计算机数据以及指令
常用的开发工具:
notepad++:高级记事本
eclipse:开发工具(半自动化)
IDEA:智能化,精确化
前端开发工具:HBuilder,webstorm
其他服务器:
web应用服务器:tomcat(理论并发量:500个)
Http服务器:nginx(理论并发量:5万)
2.Java平台版本
JavaSE:针对桌面应用程序开发。
JavaME:嵌入式的解决方案—移动端:Android。
JavaEE:针对企业开发的一套解决方案。
3.Java语言的特点
简单性、解释性、面向对象、高性能、分布式处理、多线程、健壮性、 动态、结构中立、安全性、开源、跨平台。
4.jre、jdk、jvm三者的关系
JDK (Java Development Kit):是Java程序开发工具包,包含JRE和开发人员使用的工具。
JRE(Java Runtime Environment):是Java程序的运行时环境,包含JVM 和运行时所需要的核心类库。
JVM:java虚拟机,java语言实现跨平台的基础。
三者关系:JDK > JRE > JVM
5.配置环境变量
(1)此电脑/计算机---->右键—属性----->高级系统设置---->环境变量
(2)在系统变量新建一个变量
变量名:JAVA_HOME
变量值:jdk的安装目录的路径
例如:D:\develop_software\Java\jdk1.8.0_162
(3)path中:添加新的变量值
变量值:%JAVA_HOME%\bin
建议放置在最前面:%JAVA_HOME%\bin;%System32%
注意:如果path系统变量在同一行上,每一个系统变量中间需要分 号隔开。
(4)目的:可以在计算机的任何位置编译java文件以及运行 java文件。
三、Java语法基础
1.关键字
关键字:被Java语言赋予特定的含义的单词。
例:
class:类(最基本的单元)
public:权限修饰符 (公共的,公开的)
static:静态修饰符(面向对象部分讲解)
void:方法没有具体返回值
数据类型:
基本类型:int,boolean,double,float,long,byte,short...
面向对象部分:extends(继承) interface(接口) abstract(抽象)
2.注释
作用: 提高代码阅读性
划分:
1)单行注释: //注释的文字
2)多行注释: /* 注释的文字 */
3)文档注释: /** 注释的文字 */
3.标识符
(1)作用:给类,接口,变量以及方法等所起名字的字符序列。
(2)命名规则:
1)数字字符
2)英文大小写字母
3)_和$符号
(3)注意事项:
1)不能以数字开头
2)不能包含特殊符号,除了_和$
3)不能是Java中的关键字
4)区分大小写
5)需做到见名知意
(4)包: 目录/文件夹:字母全部小写
定义格式: package cn.hsbc.dev;
单级包: com
多级包:开发中(公司域名反写) ,中间用点隔开(分包)
举例:cn.hsbc.dev
(5)类(接口)的命名规则:
1)一个单词:第一个字母大写,其余小写
举例:class Demo{} class Hello{}
2)多个单词:每一个单词的首字母大写,其余小写 (大驼峰命名法)
举例: class MakeNameDemo{}
(6)变量,方法的命名规则:
1)一个单词:单词全部小写
举例: int price = 10 ;
main()
2)多个单词:第一个单词全部小写,从第二个单词开始,首字母大写,其余小写(小驼峰命名法)
举例:checkName()
(7)常量的命名规则:
1)一个单词: 字母全部大写
举例:"HEELO"
2)多个单词:每个单词字母全部大写,单词和单词之间使用下划线隔 开
举例:"HELLO_WORLD"
4.编码格式
gbk:中国中文编码表 :一个中文对两个字节
gb2312:gbk升级版本(包含特殊的中文字符)
utf-8:一个中文对应三个字节
Iso-8859-1:拉丁文码表
5.Java中数据类型划分
(1)基本数据类型:四类8种
种类 | 类型 | 名称 | 字节 |
---|---|---|---|
整数类型 | byte | 字节类型 | 占1个字节 |
short | 短整型 | 占2个字节 | |
int | 整数 | 占4个字节 | |
long | 长整型 | 占8个字节 | |
浮点类型 | float | 单精度 | 占4个字节 |
double | 双精度 | 占8个字节 | |
字符类型 | char | 字符类型 | 占2个字节 |
布尔类型 | boolean | 布尔类型 | 占1个字节 |
(2)引用数据类型:数组,接口,类(具体类,抽象类)
(3)定义long类型的注意事项:
需要在当前变量值的后面加上标记:L或者l(建议大写L),描述当前变量是长整型
(4)定义float类型的注意事项:
在变量值的后面标记当前是一个单精度变量:F/f
6.常量
(1)定义:在程序的执行过程中,其值不发生改变的量!
(2)分类:
1)字面值常量
字符串常量:使用双引号括起来的内容
字符常量:使用单引号括起来的单个内容
整数常量:整数:默认十进制数据
小数常量:小数数据
布尔常量:true/false
空常量:null
2)自定义常量:使用final关键字修饰的变量,同时必须赋初值。
7.变量
(1)变量:值可以变得量
(2)变量的三要素:数据类型、变量名(遵循标识符的规则)、初始化值
(3)书写格式:数据类型 变量名 = 初始值;
(4)注意事项:
1)=代表赋值,叫做赋值号。
2)同一个方法中的变量不能重复声明。
3)在方法中声明的变量,他的作用域在整个方法中。
4)变量必须初始化后(变量必须有值),才能使用。
8.原码、反码、补码
正整数的原码、反码、补码都为其二进制数;
负数的原码为其二进制数,反码为原码取反、补码为反码+1。
正整数的最高符号位为0,负数的最高符号位为1。
负数取反时,最高符号位不变,数值位0变1,1变0。
9.数据类型的转换
取值范围大小关系:byte<short<int<long<float<double
(1)自动转型,也叫隐式类型提升(取值范围小转大)
举例:
byte b = 10;
short s = b;
int i = s;
long l = i;
float f = l;
double d = f;
(2)强制转型(取值范围大转小)
举例:
double d = 12.123;
float f = (float)d;
long l = (long)f;
int i = (int)l;
short s = (short)i;
byte b = (byte)s;
四、Java中的运算符
1.算术运算符
(1)算术运算符
名称 | 符号 | 用法 |
---|---|---|
加 | + | 求和 |
减 | - | 求差 |
乘 | * | 求积 |
除 | / | 求商 |
取余 | % | 求余 |
自加 | ++ | 自身加1 |
自减 | – | 自身减1 |
(2)+±-的使用
1)单独使用
结论:无论++还是–在变量前面还是后面:都是对当前该变量值进行自增1或者自减1。
应用场景:结合流程控制语句之循环语句去使用。
2)参与运算使用
如果++或者–在变量前面,先自增1或者自减1,然后运算。
如果++或者–在变量后面,先运算(赋值),然后在自增1或者自减1。
2.赋值运算符
名称 | 符号 | 用法 |
---|---|---|
赋值 | = | 为变量常量赋值 |
加等于 | += | 两边相加再赋给左边 |
乘等于 | *= | 两边相乘再赋给左边 |
除等于 | /= | 左边除以右边再赋给左边 |
模等于 | %= | 左边模以右边再赋给左边 |
减等于 | -= | 左边减右边再赋给左边 |
注意事项:
“=”不能写成”==”,”==”表示比较运算符,连接表达式最终结果为true/false。+= ,*=,-= ,/= ,%= 底层有强制类型转换。
3.比较运算符(关系运算符)
(1)比较运算符:>,<,>=,<=,==,!=
举例:变量x范围:
数学表达式: 3<=x<=5
Java表表达式:x>=3 &&(逻辑运算符) x<=5
|| (逻辑运算符)
(2)比较结果:连接的表达式无论是简单,还是复杂的,最终结果true/false
(3)注意事项:==不能写成=。
4.逻辑运算符
(1)逻辑运算符:
名称 | 符号 | 结论 |
---|---|---|
逻辑单与 | & | 有false,则false |
逻辑单或 | | | 有true,则true |
逻辑异或 | ^ | 相同则为false,不同则为true |
逻辑非 | ! | 非true,则false;非false,则true |
逻辑双与 | && | 有一个不满足条件,就false |
逻辑双或 | || | 有一个满足条件,就true |
(2)注意事项:
1)偶数个非,是当前结果本身。
2)逻辑双与&& 和逻辑单与&的相同点与不同点
①相同点:有false,则false(有一个不满足条件,就false)
②不同点:逻辑双与&& 连接的表达式,如果左边的表达式为false, 右边就不执行。(短路效果)
3)逻辑双或|| 和逻辑单或|的相同点与不同点
①相同点:有true,则true(有一个不满足条件,就true)
②不同点:逻辑双||连接的表达式,如果左边为true,右边不执行。
5.位运算符
(1)基本的运算符号
把十进制转换为二进制,再做运算
& : 同位比较,两者为1,则为1
| : 同位比较,有1,则为1
^ :同位比较,相同为0,不同为1
~(反码):按位取反,全部1变0,0变1;
(2)移动符号
1)左移(<<):左移动,将最高符合位丢弃掉,在右边补齐0。
特点:将<<符号左边的数据乘以2的移动次幂。
2)右移(>>): 右移动,如果最高符号位为0,左边补0,如果最高符号 位为1,左边补齐1。
特点:将>>符号左边的数据除以2的移动次幂 。
3)无符号右移(>>>):向右移动,无论最高符号位为0还是1,左边补0。
(3)注意事项:
1)&、|、^ 两侧为数值,此符号为位运算符,两侧为boolean值,此运算符为逻辑运算符。
2)位异或^符号特点:一个数据被另一个数据位异或两次,结果是它本身。
6.三元运算符(三目运算符)
(1)格式:
(表达式) ? 执行true的结果 : 执行false的结果
表达式:可以是简单的或者复杂的表达式,结果必须为true/false。
(2)执行流程:
1)先判断表达式是否成立,如果成立,执行true的结果
2)如果不成立,执行false的结果
五、流程控制语句
1.顺序结构语句
一旦进入main方法(由Jvm 调用)中,从有效行开始依次从上往下执行。
2.简单if分支
(1)格式:
if(表达式){
语句;
}
(2)执行流程:
判断表达式是否成立,如果是true,成立,执行语句;
如果不成立,不执行。
(3)应用场景:针对单个业务场景进行判断。
3.if…else语句
(1)格式:
if(表达式){
语句1;
}else{
语句2;
}
(2)执行流程:
首先判断表达式是否成立,如果是true,执行语句1
如果不成立,执行语句2;
(3)应用场景:针对两种情况进行判
4.多重if
(1)格式:
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
}else{
语句n+1 ;
}
(2)执行流程:
首先判断表达式1是否成立,如果成立,执行语句1,if语句结束。
如果表达式1不成立,再次判断表达式2是否成立,如果成立,执 行语句2,语句结束。
如果上述表达式都不成立,就执行else中的语句,if语句结束。
(3)应用场景:针对多种情况进行判断。
5.嵌套if语句
(1)格式:
if(表达式){
if(表达式1){
语句1;
}else{
语句2;
}
}else{
if(表达式11){
语句11;
}else{
语句22;
}
}
(2)流程:
1)首先判断外层if中表达式是否成立;
如果成立,执行表达式1是否成立;
如果表达式2成立,执行语句1;否则,执行语句2;
2)外层if中表达式不成立,就执行else中的语句
首先判断表达式11是否成立,如果成立,执行语句11,
否则执行语句22;
(3)注意事项:有if的地方需要有一对{}, 有{}的地方不能有分号。
6.switch语句
(1)格式
switch(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break ;
...
default:
语句n;
break ;
}
(2)执行流程:
1)先判断表达式的值它和case语句值1,是否匹配;如果匹配,执行语句1,遇见break ,switch语句结束。
2)如果值1不匹配,继续判断值2是否匹配,如果匹配,执行语句2,遇见break,switch语句结束。
3)如果上面的所有case语句都不匹配,执行default语句,执行语句n, 直接结束。
(3)switch中表达式的数据类型
可以使用的类型:byte,short,char,int
JDK5之后可以使用枚举enum
JDK7之后可以使用String类型
(4)注意事项:
1)switch语句中的case语句后面跟常量值,不能跟变量。
对比:javascript:switch语句 中的case可以是常量也可以变量
2)case语句中的break不能轻易省略,否则就会造成"case穿透"。
如果没有写break,跟下面case值不进行比较,直接运行语句,直到遇见break结束。
3)default语句:书写位置默认是在末尾,但是它也可以在switch语句中的任何位置,不影响执行流程。
4)如果default在语句的末尾,break可以省略,如果在语句中的话,不建议省略break ;
5)关于switch语句的结束
遇见break (中断,结束的意思) ,switch语句结束
语句默认执行到末尾。
7.for循环
(1)格式:
for(初始化语句;条件表达式;步进语句){
循环体语句;
}
(2)执行流程:
1)初始化语句给变量进行赋值,只执行一次
2)判断这个条件表达式是否成立,如果成立,就执行循环体语句,再去执行步进语句。
3)再次判断条件表达式是否成立,如果成立,继续上面执行方式…
4)一直循环到条件表达式不成立的时候,for循环结束。
8.for循环的嵌套
for(初始化语句;条件表达式;步长语句){
for(初始化语句;条件表达式;步长语句){
循环体语句;
}
}
9.while循环
(1)基本格式
while(初始化语句以及条件表达式){
循环体语句;
步进语句(控制体语句) ;
}
(2)扩展格式
初始化语句;
while(条件表达式){
循环体语句;
步进语句(控制体语句) ;
}
(3)执行流程:
1)首先初始化语句进行赋值
2)判断条件表达式是否成立,如果成立,执行循环体语句 ,执行步进语句;
3)继续判断条件表达式是否成立,如果成立,执行循环体语句 ,再次执行步进语句;
…
4)当条件表达式为false,不成立,while循环语句结束
10.do-while循环
(1)语法结构
初始化语句;
do{
循环体语句;
步进语句;
}while(表达式);
(2)执行流程:
1)执行代码块(一遍)
2)判断表达式
true – 执行代码块
执行第二个步骤
false - 跳出整个do-while循环
11.while循环和for循环的区别
(1)从格式上不太一样
for(初始化语句;条件表达式;步进语句){
循环体;
}
初始化语句;
while(条件表达式){
循环体语句;
步长语句;
}
初始化语句;
do{
循环体语句;
步进语句;
}while(表达式);
(2)从内存角度:(是否节省内存空间)
变量: 编译时期变量 运行时期变量
int i = 10 ; Integer(引用类型) i = 100 ;
for循环:for循环语句结束,变量从内存中释放掉了,节省内存空间(优先)。
while和do-while:循环语句结束,依然可以访问变量,耗费内存空间。
变量/对象最终程序结束,都需要垃圾回收器GC回收。
(3)应用场景:是否明确次数
1)明确循环次数:使用for循环(使用居多)
举例:模拟用户登录, 给三次机会!
2)不明确循环次数:while循环和do-while循环
举例:猜数字游戏: (不知道猜多少次,能猜中!)
(4)执行顺序:
for : 先判断,再执行
while : 先判断,再执行
do-while : 先执行一遍,再判断
12.两个死循环
格式1:
for(;;){
循环体语句;
}
格式2 :(推荐)
while(true){
循环体语句;
}
注:使用死循环需要为其找出口
13.跳转控制语句
(1)break:中断,结束的意思
使用:不能单独使用,没有意义,在switch中以及循环中使用。
循环中使用:
1)可以在单层循环中使用
2)早期的使用:用在for循环嵌套中使用
(2)标签语句:给外层循环/内层循环起一个名字
格式:标签名称:for(初始化语句;条件表达式;步进语句){…}
举例:a:for(int i = 1;i<=5;i++){
for(int j = 1;j<=5;j++){
if(i == 3){
//结束掉外层循环
break a;
}
System.out.println(i + " -- " + j);
}
}
(3)continue: 结束当前循环,立即进入下一次循环
作用:单独不能使用,在循环语句中使用
(4)return是具体用在具有返回值类型的方法中使用
六、提及的知识
1.Scanner的使用
Scanner是Java核心类: java.util.Scanenr;
(1)从键盘录入一个数据
操作步骤:
1)导包: import java.util.Scanner;
2)创建键盘录入对象
Scanner 键盘录入的对象名 = new Scanner(System.in) ;
3)友情提示: 输出语句 "请您输入一个数据:"
4)接收数据 (接收int类型数据)
int 接收的变量名= 键盘录入的对象名.nextInt() ;
5)输出/完成业务操作
(2)从键盘先录入一个int数据,在录入一个String数据
1)存在问题:
先录入int类型的数据,再录入String,字符串数据会将回车符号录入(表现为没有录入),每次录入数据完成需要敲"回车符号" ,回车符号本身是一个字符串值。
2)解决方法:
在录入String数据之前,重新创建一个键盘录入对象,使用该对象进行String数据录入。
(3)注意事项:
1)Java中只要不是java.lang包下的类都需要导包
2)nextInt():录入下一个 int类型的数据
3)在录入字符串数据类型时可以使用next()方法,也可以使用 nextLine()方法,建议使用nextLine()。
总结
本文主要从计算机基础、Java语言概述与环境搭建、Java语法基础、Java中的运算符、流程控制语句等方面总结了JavaSE基础语法部分的知识点。