Java基本语法
1、注释
- 单行注释
- 多行注释
- 文档注释(JavaDoc)
2、关键字
Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。
Java语言定义的关键字如下:
3、标识符
标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
注意:
-
所有的标识符都应该以字母(大写或小写)、美元符($)、或下划线(_)开始,不能以数字开头;
-
首字符后面可以是字母(大写或小写)、美元符($)、下划线(_)或数字的任意组合;
-
不能使用Java关键字作为标识符;
-
标识符是大小写敏感的。
-
可以使用中文命名,但一般不建议使用,也不建议使用拼音。
4、数据类型
Java是一种强类型语言。
4.1、强类型语言&弱类型语言
-
强类型语言
- 强类型语言是一种强制类型定义的语言。
- 一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了。
- 强类型语言包括:Java、.net 、Python、C++等语言。
如:定义了一个整数,如果不进行强制的类型转换,则不可以将该整数转化为字符串。
-
弱类型语言
- 弱类型语言是一种弱类型定义的语言。
- 某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。
- 弱类型语言包括vb 、PHP、javascript等语言。
-
强类型语言和弱类型语言区别
无论是强类型语言还是弱类型语言,判别的根本是:是否会隐性的进行语言类型转变。
强类型语言在速度上略逊于弱类型语言,但是强类型定义语言带来的严谨性又能避免不必要的错误。
4.2、Java的数据类型分为两类
-
基本类型
- 1Byte = 8bit
- 1KB = 1024B
- 1MB = 1024KB
- 1GB = 1024MB
-
引用类型
注:Java中除了基本数据类型以外的都是引用数据类型。
4.3、数据类型拓展
-
整型(int)拓展——进制
在Java中,整型数据的进制书写为:
- 十进制:正常写。
- 八进制:前缀为0。
- 十六进制:前缀为0x或0X。
- 二进制:前缀为0b或0B。
1
2
3
4int a = 11;//十进制,11
int b = 011;//八进制,9
int c = 0x11;//十六进制,17
int d = 0b11;//二进制,3 -
浮点型(float、double)拓展——舍入误差(round-off error)
由于数字在计算机中都会先被转换成二进制,然后再进行计算。而浮点数在用二进制表达时很可能是无穷的,所以浮点数在参与计算时很可能会产生**“舍入误差”**,进而导致运算结果不准确的问题。
- 测试程序一:
1
2
3
4public static void main(String[] args) {
double a = 2.4f;
System.out.println(a);
}输出结果:
- 测试程序二:
1
2
3
4
5
6
7public static void main(String[] args) {
float a = 0.1f;
double b = 1.0/10;
System.out.println(a);//0.1
System.out.println(b);//0.1
System.out.println(a==b);//false
}输出结果:
- 测试程序二
1
2
3
4
5public static void main(String[] args) {
float a = 22222222222222f;
float b = a + 1;
System.out.println(a==b);//true
}输出结果:
由于舍入误差的存在,所以计算机中浮点数计算的精度远远不如整数计算,它是一种估算。
在《Effective Java》这本书中提到:float和double只能用来做科学计算或者是工程计算,在商业(如:价格等)计算中我们要用java.math.BigDecimal类来进行精确计算。
最后,记住结论:最好完全避免使用浮点数进行比较,永远不要测试某个特定浮点数的数值。
-
字符型(char)拓展——编码
(1)字符的本质还是数字
ASCII、utf-8、GB2312、GBK、Unicode等编码方式就是将数字变成字符。
- 测试程序
1
2
3
4
5
6
7
8public static void main(String[] args) {
char a = 'a';
char b = 'A';
char c = '中';
System.out.println((int)a);
System.out.println((int)b);
System.out.println((int)c);
}输出结果:
(2)转义字符
注意区分:斜杠:“/” 与 反斜杠:“\” ,此处不可互换。
5、类型转换
由于Java是强类型语言,所以在进行一些运算的时候,需要进行类型转换。
5.1、自动类型转换
-
不同类型的数据在进行计算时,会先自动转化为同类型的数据,然后再进行运算。
-
**转换原则:**从低精度(位数低)向高精度(位数高)转换。
不同类型数据间的优先关系如下:
- 整型转换为浮点型时,将在小数点后面补零。
5.2、强制类型转换
当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。其语法格式为:
1 | (type)variableName |
注:
- 不能对布尔类型进行强制类型转换。
- 不能把对象类型转换为不相干的类型。
- 高容量的数据类型转换为低容量的数据类型时,需要强制转换。
- 在强制类型转换中,如果是将浮点型转换为整型,直接去掉小数点后边的所有数字。
- 强制类型转换可能导致溢出或损失精度。如:
1 | public static void main(String[] args) { |
输出结果:
所以,操作比较大的数的时候,注意溢出问题。
6、变量
6.1、定义
变量就是可以变化的量。
- 变量是Java程序中最基本的存储单元。
- 变量的要素包括:变量名、变量类型和作用域。
- 每一个变量都必须声明其类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符。
- 变量声明是一条完整的语句,每一个变量的声明都必须以分号结尾。
6.2、变量的作用域
-
类变量:也称静态变量,即用static 修饰的变量。
- 类变量在类加载的时候创建,在程序结束的时候销毁。
-
实例变量:也称对象变量,即没加static 的变量。
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁。
1
2
3
4class person{
static String age; //--类变量
public String name="李四"; //--实例变量
}**类变量和实例变量的区别在于:**类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。
-
局部变量
局部变量也称内部变量,是指在一个函数内部或复合语句内部定义的变量 。
-
局部变量的作用域是定义该变量的函数或定义该变量的复合语句。
-
局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。
-
7、常量
常量是指在程序的整个运行过程中值保持不变的量。
Java 语言使用 final 关键字来定义一个常量,其语法如下所示:
1 | final dataType variableName = value |
- 常量名一般使用大写字母。
- 同变量一样,常量也有三种类型:静态常量、对象常量和局部常量。
- 静态常量、对象常量和局部常量的作用域也和静态变量、对象变量和局部变量类似。
8、运算符
-
算术运算符:+,-,*,/,%(取余),++,–
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=,instanceof
注:instanceof 是 Java 的一个二元运算符,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
-
逻辑运算符:&&,||,!
-
位运算符:&,|,~,^(异或:相同则为0,不同则为1),>>,<<,>>>
注:
-
<<表示左移,不分正负数,低位补0,左移一位相当于乘以2;
-
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1,右移一位相当于除以2;
-
>>>表示无符号右移,也叫逻辑右移。即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
-
-
条件运算符:? :
-
拓展赋值运算符:+=,-=,*=,/=
9、包机制
9.1、包的本质
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
注:
- 包的本质就是文件夹。
- 同一个包下的类不能同名。
9.2、定义包
-
一般将公司域名倒置作为包名(如:atangbiji.com)。
-
我们可以通过包语句来定义包,包语句应该写在类的最上面(第一行),其语法格式为:
1
package package1[.package2[.package3...]]; //如:package com.atangbiji;
9.3、导入包
Java程序中为了能够使用某一个类的成员,我们一般需要使用import语句明确导入该包。具体语法如下:
1 | import package1[.package2[.package3...]].(ClassName|*);//import 包名.类名或通配符* |
- **import使用时机:**在A类中使用B类。
- 若A类和B类都在同一个包下,则不需要import;
- 若A类和B类不在同一个包下,则需要使用import;
- java.lang.*; 这个包下的类不需要使用import导入。
- import如何使用?
-
import语句只能出现在package语句之下,class声明语句之上。
-
import语句还可以采用通配符(*)代替类名,这样就表示导入对应包下的所有类。
注:这里的*表示通配符,匹配该包下的所有类。
10、JavaDoc
javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。
- javadoc命令是用来生成自己API文档的。
10.1、使用方式
- 方法一:使用命令行在目标文件所在目录输入javadoc +文件名.java。
- 方法二:通过IDEA生成Javadoc。( Tools –> Generate JavaDoc)
10.2、常用标记
(本讲完,系列博文持续更新中…… )
关注**“阿汤笔迹”** 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2020/11/09/basicGrammarOfJava
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。