Java(基础语法汇总)
文章目录
- 零、Java基础概念
- Java命名规范
- 关键字
- 标识符
- 注释
- 常量
- 变量
- 一、强类型语言
- 二、数据类型分类
- 1、基本数据类型
- 整数类型
- 四种类型所占内存空间:
- 注意事项:
- 整数的表示方式:
- 字符类型
- 字符型表现形式:
- 浮点类型
- 两种类型所占内存空间:
- 注意事项:
- 关键的无穷:
- 布尔类型
- 2、引用数据类型
- 三、基本类型转换
- 自动类型转换
- 强制类型转换
- 四、表达式类型的自动提升
- 五、运算符
- 算术运算符
- 赋值运算符
- 扩展赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三目运算符
- 运算符优先级和结合性
Java基础语法部分与c++及c语言大同小异,本篇列举我容易搞混的点。零、Java基础概念 Java命名规范
规范这种东西,当然是能遵守就遵守,你不遵守,虽然不会怎么样,但是容易被喷。毕竟代码都是给别人看的,可读性很重要。
- Java对大小写很敏感,hello和Hello不同。
- 英文一定要对应意思!!!不然别人真的看了会笑。拼音也就自己看的懂,随便取个a过一段时间自己都看不懂啦。
- 源文件名必须和类名相同,即
类名.java
。不这样搞就错了! - 类名采用大驼峰命名法,即每个单词首字母大写。
- 变量名,方法名采用小驼峰命名法,即第一个单词首字母小写,其他单词首字母大写。
- 常量名全部大写且用
_
隔开。 - 包名全部小写且用
.
隔开。
goto
和const
是Java的保留字,以备扩充,也就是说,暂时不能用,以后说不定关键字不够用了,他们就上了。- 不能用于常量、变量和任何标识符的名称。
- 具体的关键字有哪些,以后应该会遇到,现在写起来也没啥用,还没学到呢。
标识符就是用来命名的。
- 关键字不能当做标识符!
- 对大小写敏感。
- 开头以
A-Z
或者a-z
,美元符号$
或者下划线_
开始。 - 数字不能作为开头,但可以放在中间。
123hello
是错 的!
- 单行:
//这是单行注释
,/*这也是单行注释*/
- 多行注释:
/*大家好! *这是多行注释哦! */
接下来几种注释,在之后的面向对象学习中将会遇到,但在书上看到了,先列在这边。
- 类注释:
/** * Copyright ? 2019 sumerday Powered by .NET Core 3.0.0 on Linux * FileName: HelloWorld.java * 类的详细说明 * * @author 类创建者姓名 * @Date创建日期 * @version 1.00 */
- 方法注释:
/** * 类方法的详细使用说明 * * @param 参数 参数的使用说明 * @return 返回结果的说明 * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明 */
- 属性注释:
/** 提示信息 */ private String myName = null;
- 方法内部注释:
//背景颜色 Color backGroundColor = Color.Blue
- 构造方法注释:
/** * 构造方法的详细使用说明 * * @param 参数 参数的使用说明 * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明 */
- 常量就是执行程序的时候,值不发生改变的量。
- Java中用
final
关键字来修饰常量,而且只能被赋值一次。例如:final int NUM = 5;
- Java中空常量
null
无法输出。
变量相当于一个有名称的容器,用于装不同类型的数据。
Java和c系列语言不同的是,Java对声明和定义不区分。
- 变量的定义:
变量类型 变量名称;
或者变量类型 变量名称 = 初始值;
- 变量可以分为局部变量和成员变量,成员变量又分为实例变量和类变量,之后会进行总结。
- 变量还可以加修饰符,之后也会提到。
- 声明一个变量之后,一定得用赋值语句对其进行显示初始化,不能使用未初始化的变量。
//以下会报错 double num; System.out.println(num);
Java就是一种强类型的语言,包含着以下含义:
- 所有的变量必须在声明之后才能使用,不能用的不明不白或者用得很随意。
- 指定类型的变量只能结束类型与之匹配的值,很好理解,种瓜得瓜,种豆得豆,这才正常。
Java数据类型分为基本数据类型和引用数据类型两大类。1、基本数据类型
字符类型其实归于整数类型,是无符号整数类型。但鉴于他和其他兄弟姐妹有点不一样,所以把他单独拎出来,基本数据类型变分成了四类。整数类型
1字节 = 8位四种类型所占内存空间:
byte
:在内存中占1个字节,也就是8位,表数范围:-2^7 ~2^7-1short
:在内存中占2个字节,也就是16位,表数范围:-2^{15} ~2^{15}-1int
: 在内存中占4个字节,也就是32位,表数范围:-2^{31} ~2^{31}-1long
: 在内存中占8个字节,也就是64位,表数范围:-2{63}~2{63}-1
- 如果将一个比较小的整数(当然比byte和short要小)赋给byte和short变量,系统会自动把他们当作这两种类型处理。
- 如果把上面那个小的整数赋给long变量,系统首先会把数值当作int处理,int类型之后自动转换成long类型。
- 如果使用一个较大的整数值(反正比int大),系统则不会自动把他当作long处理,如果想的话,就在后面加上L或者l吧,推荐L。
- 二进制:以0b或者0B开头。
- 八进制:以0开头。
- 十进制:懂得都懂。
- 十六进制:以0x或者0X开头。
所有的数字在计算机底层都是以二进制的形式存在的,且以补码的形式保存所有的整数。
- 正数的补码和原码完全相同。
- 负数最高位符号位不变,其他去反,整体加1,就是补码。
- 整数值默认是int类型,占32位,且最高位为符号位。最后加上L之后,转换成long类型,占64位。
- 由于最高位符号位的存在,当强制转换时,可能会导致数据产生偏差。
字符型的值要用单引号字符型表现形式:' '
,一定是单引号!!!Java使用16位的Unicode字符集作为编码方式,所以支持任何语言。
定义方式char varName;
- 直接通过单个字符表示。如
A
,0
等。 - 通过转义字符表示,如
\t
,\r
,\n
等。如果想输出特殊的字符,则需要加上\
再次转义,例如"d:\\numert".
- 通过Unicode值表示,如
\uXXXX
,XXXX代表一个16进制整数。
两种类型所占内存空间:
float
:单精度浮点数,占4个字节,32位,第一位符号位,后8位为指数,后23位为尾数。double
:双精度浮点数,占8个字节,64位,第一位符号位,后11位指数,后52位尾数。
- 默认类型为double类型,想用float类型处理,需要在后面i爱上f或者F。
- 浮点数需要加上小数点,不然当成int处理就懵逼了。
- 只有浮点数类型的数值才能用科学记数法:3.14e2表示3.14*10^2
Java为浮点数运算提供了三个特殊的浮点数值:正无穷大,负无穷大和非数。
- 正无穷大:正数除以0得到->
POSITIVE_INFINITY
. - 负无穷大:负数除以0得到->
NEGATIVE_INFINITY
. - 非数:0.0处以0.0或者对负数开方得到->
NaN
- 注意:如果整数值除以0,会报错。
如果数值中位数过多,不论整数还是浮点数都可以通过下划线分割:布尔类型0b0000_0000_0010_1111
- 只有boolean类型,表示逻辑“真”或“假”。
- Java中不能用0或者非0表示true或者false。
- 其他的基本数据类型也不能转换成boolean类型。
- boolean类型值和字符串进行连接时,会自动转换为字符串类型。
包括类、接口和数组类型,以及特殊的null类型。
- 之后将会提到。
- 自动也就是系统支持的,将表数范围小的数值直接赋给表数较大的变量,就可以实现自动类型转换。
- 其实很好理解,类似于数学里的集合,A比B大,C可以存在B里面,当然就可以存在A里面,而且空间还变大了呢,舒服。
- 任何基本类型的值和字符串进行连接运算时,都会自动转换成字符串类型,虽然字符串为引用类型。
- 下图为自动类型转换图:
文章图片
强制类型转换
- 相反,自动类型转换图按反方向转换的话,就需要强制转换,格式:
(目标类型)值
。 - 显然,和自动类型相比,强制类型转换是有风险的,可能会溢出,造成信息丢失。
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型会发生自动提升。
- byte、short和char类型将自动提升为int类型。
- 提升到最高等级操作数同样的类型。具体查看转换图,右边比左边高。
- 易发生错误:
//定义一个short型变量 short value = https://www.it610.com/article/4; //右边数值2为int型,所以右边自动转换为int类型,而左边是short,不匹配,错误! value = value -2;
int val = 3; //右边两个操作数都是int型,尽管不能除尽,但仍然得到int型数,输出int值7 int value = https://www.it610.com/article/23/val;
System.out.println("hello"+'a'+10); //输出字符串helloa10 System.out.println('a'+10+"hello"); //‘a'自动提升至int类型,得出107,之后与字符串拼接,自动转换为字符串类型,输出字符串107hello
Java中运算符可以分为算术、赋值、比较、逻辑、位和类型相关运算符等多种,本篇一一做出总结。算术运算符
算术?无非就是加减乘除嘛,除此之外还有呢。
-
+
:除了可做基本数据类型的加法,还可以作为字符串的拼接符。
-
/
:除法也相对特殊,用作整数计算,且除数不能是0,结果也为整,就算取不到整数也得强行截断。如果至少有一个浮点数,那么就是自然除法,而且还会有无穷和非数的情况出现。
-
%
:求余运算,涉及到除法运算需要注意除法运算相关事项。
-
++
:自加,只能操作一个操作数或者单个数值类型的变量(变量!!!)。
++m
和m++
的区别:
- ++m是先把m加上1,然后再把结果放入表达式中进行计算。
- m++实先把m的值放到表达式中计算,然后给m值加1。
int a =5; int b = a++; //b=5,之后a++,变为6 int c = ++a; //c=6+1=7 System.out.println(a+","+b+","+c);
- ++m是先把m加上1,然后再把结果放入表达式中进行计算。
-
--
:同理++
。
Java中可以借助赋值运算符java.lang.Math
类中的方法完成相对麻烦的数学运算,如乘方、开方等运算。
import static java.lang.Math.*;
为变量指定变量值。就是把什么东西装到容器里面。
- Java与其他语言类似,也是用
=
进行赋值操作。
double pi = 3.14;
- 赋值也可以将一个变量的值赋给另外一个变量。
int a = 5; int b = a;
- 可以一次为多个变量赋值,但可读性较差。
扩展赋值运算符
隐含强制转换类型,更具健壮性。
tips:a+=5;与a=a+5;有些时候代表的并不相同。
byte a = 4; a = a + 5; //报错,因为左边为byte,右边自动上升为int。 byte b = 4; b += 5; //正常,因为把b设置为(byte)(b+5)
就是比大小嘛,出来是个布尔值。
==
:- 如果比较的是两个数值类型的数,只要值相等,就返回true,哪怕类型不相同。
5.0==5;
- 如果都是引用类型的话,必须指向同一对象才会返回true。
- boolean类型也可以比较。
true == false;
,返回false。
- 如果比较的是两个数值类型的数,只要值相等,就返回true,哪怕类型不相同。
用来操作两个布尔型的变量或者常量。
&&
和&
:都表示着与逻辑,全真为真,有零出零。前者&&
代表“短路与”,即如果判断的第一个操作数或者表达式为false,就不再对后面的操作数求值,而是直接返回false。||
和|
:都表示着或逻辑,有真出真,全零出零。前者代表“短路或”,同理于“短路与”。第一个为true,直接true,根本不管后面的相当于短路掉了。
处理整型类型时,直接对组成整型数值的各个位完成操作。
&
是按位与,|
是按位或,~
是按位非。^
是按位异或,两位相同为0,不同为1。<<
是左移,>>
是右移。>>>
是无符号右移,没有<<<
这个符号。>>>
会用0填充高位,前者则是用符号位填充。- 对于比int类型小的操作数,总是先转换为int再移位。
- 对于int类型a>>b,如果b>32,则移位的位数为b%32,long类型同理。
- 移位时,如果二进制码没有发生有效数字丢失的情况,左移n位等价于乘上2的n次方,右移则是除以2的n次方。
直接上例子!
String a;
a = 2>1 ? "2比1大":"2比1小";
System.out.println(a);
表达式 ? 成功语句 :失败语句;
是基本定义式子。- 表达式为true,执行成功语句,false则执行失败语句。
- 三目运算符不支持多个语句,但可以嵌套使用。
运算符优先级自上而下逐级递减。
运算符说明 | Java运算符 | 结合顺序(<–表示从右到左) |
---|---|---|
分隔符 | . [] () {} , ; | –> |
单目运算符 | ++ – ~ ! | <– |
强制类型转换运算符 | (type) | –> |
乘,除,求余 | * / % | –> |
加法,减法 | + - | –> |
移位运算符 | << >> >>> | –> |
关系运算符 | < <= >= > instanceof | –> |
等价运算符 | == != | –> |
按位与 | & | –> |
按位异或 | ^ | –> |
按位或 | | | –> |
条件与 | && | –> |
条件或 | || | –> |
三目运算符 | ?: | <– |
赋值 | = += -=等 | <– |
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 事件代理
- 六步搭建ES6语法环境
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- Python基础|Python基础 - 练习1
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组