Java基础 – 语法基础
这是Java教程的第一篇,梳理Java基础知识是学习其他专业知识的第一步阶梯;要想精通编程必须通过大量的编程训练,在实践中掌握编程知识,培养编程能力,并逐步理解和掌握程序设计的思想和方法。
1. 数据类型
1.1 两大类:
- 基本数据类型:byte,short,int,long,float,double,boolean,char。
- 引用类型:数组,类(抽象类)class,接口interface,枚举enum,注解@interface。
注:单个字节表示
8位二进制位,最左边表示符号位(0:正,1:负)。
1.2 整数类型(byte, short, int, long)
- byte: 1字节,范围- -2^7 ~ 2^7-1,即- -128-127。
- short: 2字节,范围- -2^15 ~ 2^15-1,即- -32768 ~ 32767。
- int: 4个字节,范围- -2^31 ~ 2^31-1,即- 正负21亿之间。
- long: 8个字节,范围- -2^63 ~ 2^63-1,比- int更大。如果要表示- long类型数值,需要- L或- l结尾。
1.3 浮点类型(float,double)
- float:4个字节,单精度浮点数,取到小数点后- 7位有效数字。如果表示- float类型数值,需要- F或- f结尾。
- double:8个字节,双精度浮点数,取到小数点后- 15位有效数字。如果表示- double类型数值,需要- D或- d结尾。
扩展:浮点运算有时会有误差,为了实现精确运算可使用
java.math.BigDecimal类型加以描述。
1.5 字符类型(char)
- char:2个字节,表示单个字符的数据类型。事实是一个16位无符号整数,值是对应字符的编码,如:'a','1','中'等。
- 开发中很少用到char类型,而使用String类型描述的多个字符组成的字符串,使用双引号""引起来。
- 需记住的ASII码字符:'a':97,'A':65,'0':48,空格:32,换行符:10
- 常用转义符(逃逸字符):\t:制表符,\n:换行,\",\',\\:反斜杠本身,\b:回退一格,\r:回车
- 字符类型计算
- 一个字符加一个数字,得到Unicode码表中那个数之后的字符
- 两个字符相减得到它们在表中的距离
- char也可以和- int之间相互赋值
 
- 一个字符加一个数字,得到
2. 变量与常量
2.1 常量
- 常量是一个值,在程序运行的过程中不能再次发生改变
- 基本类型的值都可以认为是常量:4,3.4,'a',true;引用类型String类的值"abc"视为常量。
- 常量存储在常量缓冲区(常量池)中,有且只有一份,常量池中的值默认空间大小int(32bit),double(64bit)。
2.2 变量
- 变量是在栈内存中开辟的一块内存空间,程序执行过程中可以改变;
- 变量空间在创建的时候(声明变量),必须指定数据类型,变量空间的名字
- 变量空间,里面只能存储一个内容(值/引用)
- 空间内的类容的类型与定义时一致,内容可以改变
- 内存结构与执行过程:类的定义,编译,加载空间各个区,变量赋值
2.3 标识符(变量)命名规则
- 必须字母,数字,下划线以及美元$等组成,且首位非数字。
- 不能使用Java语言中的关键字,如class,static,void,int等。
- 区分大小写,长度无限制,但不能过长,尽量见名知意。
2.3 命名的规约
- 类名字:首字母大写,如果两个以上的单词,所有首字母都大写
- 变量名:首字母小写,如果两个以上的单词,之后的首字母大写
- 遵循驼峰式命名规约,所有名字都需要见名知义,为了增强程序的可读性
3. 数据类型之间的转换
3.1 基本数据类型之间转换
- 自动类型转换:从小类型到大类型自动转换
byte --> short --> int --> long --> float --> double
          char -----^
- 强制类型转换:需在被转换数据前加上类型,会造成精度损失或者溢出
long big = 1024L\*1024\*1024;
int i = (int)big;
3.2其他数据类型之间转换
- 同种大类型之间才能发生转换
- 基本–基本 可以直接转换(自动 强制)
- 引用–引用 可以直接转化(自动 强制 – 上转型 下转型)
- 基本–引用 不可以直接进行转化(间接-桥梁-包装类)
 
- 小数据类型一致:整型–>整型 / 浮点–>浮点
- 比较内存空间的大小
- 大数据类型空间可以直接接受小数据类型的值(自动转换)
- 小数据类型空间不可以直接接受大数据类型的值(强制类型转换)
- 强制类型转换,写法好用,但是需要注意取值范围的问题,丢失一部分数据
 
byte a = 1;   int b = a;//自动直接转化就可以
int a = 1;  byte b = (byte)a;//需要强制类型转换
float x = 3.4F;   double y = x;//自动直接转化
double x = 3.4; float y = (float)x;//强制转换
- 小数据类型不一致:整型–>浮点
- 比较精确程度
- 浮点型的精确程度更高
- 任何一个浮点型空间都可以直接接受一个整型的值
- 反之需要进行强制类型转换(强行将小数点之后的部分去掉,只保留整数)
 
int a = 1;  float b = a;//自动直接转化
float a =1.0F;  int b = (int)a;//强制类型转换
- 整型–>字符
- 每一个字符都对应这一个Unicode码 a–97
 
- 每一个字符都对应这一个
char x = 'a';  int y = x;//自动转化  y--97
int x = 97; char y = (char)x;//强制的转化
- 布尔类型很特殊
- 不能与其他基本类型之间发生转化
 
4. 运算符
- 算术运算符: +,-,*,/,%
- 关系运算符: >,<,>=,<=,==,!=
- 自增减运算符: ++,--
- 逻辑运算符: &&,||,!(短路特性:逻辑与&&运算,若第一个条件为假,跳过第二个条件;逻辑或||运算,若第一个条件为真,跳过第二个条件)
- 三目运算符: 条件 ? 表达式1 : 表达式2
- 赋值运算符:=,+=,-=,*=,=
5. 循环
- while循环和- for循环完全可以互换。
- while循环主要用于明确循环条件,但不明确循环次数的场合
- for循环主要用于明确次数或范围的场合
- while(true)等价于- for(;;),表示无限循环。
6. 数组
6.1 一维数组
- 数组类型[] 数组名 = new 数据类型[长度]:动态方式
数组类型[] 数组名 = new 数据类型[长度] //动态方式
int[] arr = new int[5];
数组类型[] 数组名 = {初始值1, 初始值1, 初始值1, ...} //静态方式
int[] arr = {10, 20, 30, 40};
/*特殊方式:*/ int[] arr = new int[]{10, 20, 30};
6.2 二维数组
数组类型[][] 数组名 = new 数据类型[行数][列数]
int[][] arr = new int[5][6];
数组类型[][] 数组名 = {{初始值1, 初始值1, 初始值1},{值2,...} ...}
int[] arr = {{10, 20, 30}, {01, 5, 3}, {8, 20, 6}};
二维数组
arr.length表示行数,arr[0].length表示此行的长度
7. 函数
- 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值。
public static int sum(int a, int b){
  int i;
  int sum=0;
  for(i=a; i<=b; i++){
    sum += i;
  }
  System.out.println(a +"到"+ b +"的和是"+ sum);
  return sum;
}
- 函数的调用:函数名(参数值); 即使没有参数也需要(),()起到了调用函数的作用,如果有参数,则需要给出正确的数量和顺序
- 函数的返回:return停止函数的执行,并返回一个值,可以再赋值给变量,传递给另一个函数,甚至可以丢弃,有时候要的是副作用。
END .
相关系列文章
- Java基础 -- 常见JAVA集合类的数据结构分析
- 网络协议基础
- Java基础 -- Web编程基础
- Java基础 -- 数据结构与算法入门
- Java基础 -- 常用设计模式
- Java基础 -- 网络编程基础
- Java基础 -- 反射机制
- Java基础 -- 多线程
- Java基础 -- IO机制
- Java基础 -- 异常处理机制
- Java基础 -- 集合框架
- Java基础 -- 核心工具类
- Java基础 -- 面向对象
- Java基础 -- 语法基础