这是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 基本数据类型之间转换
自动类型转换:从小类型到大类型自动转换
1 2 byte --> short --> int --> long --> float --> double char -----^
强制类型转换:需在被转换数据前加上类型,会造成精度损失或者溢出
1 2 long big = 1024L\*1024\*1024; int i = (int)big;
3.2其他数据类型之间转换
同种大类型之间才能发生转换
基本–基本 可以直接转换(自动 强制)
引用–引用 可以直接转化(自动 强制 – 上转型 下转型)
基本–引用 不可以直接进行转化(间接-桥梁-包装类)
小数据类型一致:整型–>整型 / 浮点–>浮点
比较内存空间的大小
大数据类型空间可以直接接受小数据类型的值(自动转换)
小数据类型空间不可以直接接受大数据类型的值(强制类型转换)
强制类型转换,写法好用,但是需要注意取值范围的问题,丢失一部分数据
1 2 3 4 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;//强制转换
小数据类型不一致:整型–>浮点
比较精确程度
浮点型的精确程度更高
任何一个浮点型空间都可以直接接受一个整型的值
反之需要进行强制类型转换(强行将小数点之后的部分去掉,只保留整数)
1 2 int a = 1; float b = a;//自动直接转化 float a =1.0F; int b = (int)a;//强制类型转换
1 2 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 数据类型[长度]
:动态方式
1 2 数组类型[] 数组名 = new 数据类型[长度] int [] arr = new int [5 ];
1 2 3 数组类型[] 数组名 = {初始值1 , 初始值1 , 初始值1 , ...} int [] arr = {10 , 20 , 30 , 40 }; int [] arr = new int []{10 , 20 , 30 };
6.2 二维数组 1 2 数组类型[][] 数组名 = new 数据类型[行数][列数] int [][] arr = new int [5 ][6 ];
1 2 数组类型[][] 数组名 = {{初始值1 , 初始值1 , 初始值1 },{值2 ,...} ...} int [] arr = {{10 , 20 , 30 }, {01 , 5 , 3 }, {8 , 20 , 6 }};
二维数组arr.length
表示行数,arr[0].length
表示此行的长度
7. 函数
函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值。
1 2 3 4 5 6 7 8 9 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
停止函数的执行,并返回一个值,可以再赋值给变量,传递给另一个函数,甚至可以丢弃,有时候要的是副作用。
原文链接: http://chaooo.github.io/2017/04/07/java-grammar.html
版权声明: 转载请注明出处.