Java基础语法
Java语法基础
一、类的基本结构
类是组成Java程序的最小结构单元。
基本语法:
public class SyntaxBasic{ }
一个类的组成
有两个部分构成:类头和类体。
花括号前的部分称为类头。用来修饰一个类的特征。
-
public称为访问修饰符
-
class称为类关键字
-
SyntaxBasic是类的名称,名称的命名要求要见名知意。
花括号内的部分称为类体,也就是类的主体部分。
二、 main方法的结构
main方法也成主方法,作为代码执行的入口,只要main方法体内存在有效代码,运行时便会输出结果。
基本语法:
public static void main(String[] args){ }
main方法的主要存在的一些特性
-
public称为访问修饰符
-
static表示静态方法
-
void表示无参数返回值
-
圆括号内表示是方法能够获取到的参数也称资源。String[]表示参数类型为字串符数组类型,args为参数变量的名称
-
花括号称为方法体,包含代码的部分
三、注释、标识符、关键字、变量和常量
1.注释
便于给代码注释其含义的辅助文本,供编写者查看。
注释分为单行注释、多行注释和注释文档
注释的用法及规范
-
单行注释,一种是写在单行代码的后面,若内容过多,可以写在代码的上面。另一种是写在一行代码的前面,使这段代码编译被忽略但也不会消失
-
多行注释,对于代码中较为复杂的操作的解释,例如用在if,for循环的注释
-
注释文档,用于生成程序的相关信息。在实际工作中一般写在类头和方法头的上面,注解文档中可以用*号开头也可以不用
规范演示
/** * @author Wavesboker //作者名 * @version //版本号 * @since //开发用的Java版本 * @param //参数名 * @return //返回值 * @throws //异常抛出情况 */ public class Test{ /** 这是文档注释 支持多行 */ public static void main(String[] args){ int num = 10;//这是单行注释 //包含在注释中的代码编译时被忽略int score = 15; System.out.println("显示的值" + num); } }
2.标识符
给一个类、一个方法或者是变量定义的名称称为标识符。这些名称都是由程序员自定义的。
标识符的命名规则
-
A~Z和a~z的英文字母表示(推荐使用规则)
-
0~9的数字(不能用来作为开头)
-
_下划线(一般用在常量名两个单词之间的连接)
-
$美元符号(只用在给类中类定义变量名字的特殊情况)
-
不能以关键字做为标识符,例如:public,class,void等
标识符的应用范围
-
类名:由英文字母命名,首字母大写。多个单词组成,单词首字母都要大写(帕斯卡命名)
-
方法名:由英文字母命名,首字母小写。多个单词组成,第二个单词首字母大写(驼峰命名)
-
变量名:由英文字母命名,方法名规则一样(驼峰命名)
-
常量名:英文字母全大写,多个单词之间用下划线_连接
实例:
定义类
public class Note{ }
定义变量
int number = 1;
定义方法
public void method(){ }
定义常量
final int MAX_VALUE = 100;
3.关键字-----
在某种语言当中表示特殊语义的特殊符号。由语言开发者定义,不能被程序员修改
关键字的种类以及作用
-
访问修饰符 Java中用来保护类、方法、变量和构造方法访问权限的修饰符
-
public 即公共的,访问权限最高,所有的类都可见。可以用在类、方法、变量和接口
-
default 默认的(可以不用写),在同一包当中可见。可以用在类、方法、变量和接口
-
protected
-
private
-
类修饰符
-
class 仅用来修饰类
4.变量
在Java中,变量用于对内存数据进行存储,获取。并且可以进行修改的标识符
变量的声明与定义
变量的声明,格式为数据类型+变量名。声明变量中没有数据
int number;
变量的赋值,格式为变量名+等号+变量值。前提先给变量声明之后,一般是将等号右边的值存放在左边的变量中
number = 10;
变量的声明并赋值,声明和赋值一起执行。一行代码完成变量声明和定义,给变量赋初始值
int age = 10;
变量的作用域
作用:为了避免在复杂的系统中代码发生冲突,划分变量的使用范围。
public class Variable{ //全局变量 int quantity; int height; public static void main(String[] args){ //局部变量 int num = 10; int power = 100; System.out.println("数量为" + num); } }
按照结构划分为全局变量和局部变量
-
全局变量:全局变量可以在整个类中使用
-
局部变量:只能在方法内使用,使用范围就是整个方法的花括号内
注意点:由于案例当中的main方法为静态方法,所以也无法使用全局变量
5.常量
常量的数据是固定不变的,初始值后不能被修改
常量的类型
分为普通常量(常数)和标志性常量
-
普通常量体现在变量值、字串符、字符和布尔常量
int a = 12; char b = 'z'; String name = "张三"; boolean result = true;
-
标志性常量是由final关键字修饰的变量
final double PI = 3.1415926;
注意:被final修饰的变量必须要赋予初始值,而且不能进行二次修改
四、数据类型
变量是来申请内存存储数值的。
内存管理系统通过变量的类型来匹配相同类型的储存空间,储存空间用来储存该类型数据。
Java中数据类型的分类
数据类型分为基本数据类型和引用数据类型
基本数据类型分为整型、浮点型、字符型和布尔型
1.整型的种类以及属性
-
byte 在JVM内存占1个字节,一个字节等于8位,数据有效范围-128~127
-
short 占16位,范围-32768~32767
-
int 最常用的整型存储类型 占32位 范围-2147483648~2147483647
-
long 占64位 范围-9223372036854775808~9223372036854775807
byte numA = 127; short numB = 32767; int numC = 2100000; long numD = 920000
2.浮点型的种类以及属性
-
float 单精度类型 占32位 范围在1.4E-45~3.4028235E38
-
double 双精度 占64位 范围在4.9E-324~1.7976931348623157E308
float height = 12.5f; double width = 5.567342;
注意点:float类型的常数需要加上f的后缀才能存放在float类型的内存中
浮点数据保留小数的处理
DecimalFormat 路径:Java.text.DecimalFormat
使用DecimalFormat类可以实现保留浮点数据小数点后几位数字的个数
DecimalFormat.format()方法可以将目标数据转换成字串符的格式
案例演示
import java.text.DecimalFormat;//从java中导入工具类 public class Test{ public static void main(String[] args){ DecimalFormat object = new DecimalFormat("0.000");//创建对象,特性是保留小数点后三位 double num = 2.744866952; String numStr = object.format(num);//将浮点类型数据转换成字符串类型 System.out.println(numStr); } }
经过处理的浮点数据会采用四舍五入的方式保留
科学计数法的表示
在Java中若出现浮点数据过长,系统会自动将其转换为科学计数法的形式,仅用于浮点型的数据
转换规则:
double number = 4E2.8;
4E2等于4乘以10的二次方,转换结果为400.8
3.字符型的定义以及属性
字符数据类型用来储存单个字符的数据,用单引号包围。JVM对字符采用unicode无符号进行编码。
char 在JVM中占用16位 范围为0~65535 默认值为\u0000
char name = '张';
char类型兼容int类型,可以直接将字符型数据转换成整数
转义字符
特殊的单个字符,不能直接显示的字符要用转义字符表示
下列为常见转义字符表
4.布尔型的定义以及属性
boolean型数据类型只有两种表示方式true和false,一般应用于逻辑判断。
boolean 按JVM标准占4个字节 默认值为false
boolean result = false;
五、数据类型转换
1.数据类型转换的种类
-
自然转换,低精度数据类型向高精度数据转换
数据类型精度从小到大排序
byte<<<short<<<int<<<long<<<float<<<double
案例
byte small = 15; int bigger = byte;
低精度的数据可以任意的存放在高精度数据类型的内存中,只用于相兼容的数据类型,如char型不能和boolean型进行转换
-
强制转换,高精度类型数据存放在低精度类型内存中,会丢失数据精度
转换格式:
低精度数据类型变量 = (低精度数据类型关键字)高精度常量/变量;
案例
int num = (int)18.67;//double类型转int类型 double money = 1756.4457; long bank = (long)double;
括号内的强制转换的数据类型要与低精度数据类型变量相兼容
扩展:源码、反码和补码
-
原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
例如:用8位二进制表示一个数,+9的原码为0000 1001,-9的原码就是1000 1001
-
反码
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。反码的表示方法是:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1。
例如:+11的反码为0000 1011,-11的反码为1111 0100
-
补码
正数:正数的补码和原码相同。负数:负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如:+7的补码为0000 0111,-7的补码为1111 1001
当数据类型从高转低发生溢出时,最终输出的结果会发生改变
案例
public class Test{ public static void main(String[] args){ int num = 130; byte result = (byte)num;//当int型转换byte型内存溢出后 结果会变成负数 System.out.println("转换内存溢出结果:"+result); } }
从案例中得出最终转换结果为-126,因为数据的溢出,导致结果变成了负数
原理解析:
由于计算机底层是以数字二进制的源码、反码和补码来进行表示
根据原理分析
由于int类型的130强制转换为byte类型,byte类型数值位是8位,130转换成二进制为1000 0010,最高位是“1”
所以是一个负数为000 0010。在通过补码表示负数,转换成反码为111 1101,再+1等于111 1110
111 1110转换成十进制结果就是-126
各进制的表示方式和换算
1.进制的前缀表示
-
二进制:前缀为0b,范围:0和1
-
八进制:前缀为0o或者0,范围:0-7
-
十进制:没有前缀,所有表示的数字都是十进制,范围:0-9
-
十六进制:前缀为0x,后缀为H,范围:0-9,A-F,a为10
2.各进制的运算机制
二进制转十进制
int t = 0b1111; System.out.println(t);
运算过程:
t变量赋值的是一个二进制的数值
输出的值运算方法:
是从0开始右往左数2的0次方乘以第一位数加上2的1次方乘以第二位数加上2的2次方乘以第三位数……以此类推
每一位数运算的结果从右往左排再相加1+2+4+8=15
八进制转十进制
int i = 012; System.out.println(i);
运算过程:i变量赋值的是一个八进制的数值
输出的值运算方法:
同样从右往左数8的0次方乘以2加上8的1次方乘以1加上8的2次方乘以0
每一位数运算的结果从右往左排再相加2+8+0=10
十六进制转十进制
int y = 0xc8; System.out.println(y);
运算过程:y变量为十六进制
输出的值运算方法:
16的0次方乘以8加上16的1次方乘以12
结果为8+192=200
二进制转八进制
例:0b110101
由于2的3次方为8,可以将二进制代码从右往左每三个数字分成一组,每组按照4 2 1法则组合,110=6,101=5,组合起来是65
例:0b1011
若遇到不能每三个分成一组的,从右往左数,最后一个不能三个数分成一组的补0,001011,001=1,011=3,组合起来是13
二进制转十六进制类似于二进制转八进制,但是2的4次方为16,所以需要将二进制代码每四个组成一个数,每组按照8 4 2 1法则组合