3. JavaSE 基础语法
注释
注释不会被执行,是我们写给代码阅读者的。
java中的注释有三种:
-
单行注释: //,只能注释当前行。
//输出Hello
-
多行注释: /**/ ,可用于注释一段文字。
/*
这是我们程序的入口
main方法也是程序的主线程
*/
文档注释: /** */ 用于生成API文档,配合JavaDoc。
/*
*@Description User类
* @Author panbin
**/
标识符
下面是java定义的关键字
关于Java 标识 符,有以下几点需要注意:
- 所有的标识符都应以字母(A-Z 或者 a-z),美元符($)、下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名。
- 标识符是大小写敏感的
- 合法的标识符举例: apple、$salary、_value、_1_value
- 非法的标识符举例:123ab、-salary、#abc
数据类型
强弱类型语言
1.强类型语言
也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
Java、.NET、C++等都是强制类型定义的。一旦一个变量被指定了某个数据类型,如果不经过转换,那么它就永远是这个数据类型了。
优缺点:安全性高,运行效率相对较慢;
2.弱类型语言
也称为弱类型定义语言。像vb,php,javascript等。
数据类型
Java的数据类型分为两大类:
- 基本数据类型(primitive type),有8大数据类型,其它都是引用类型
- 引用数据类型(reference type)
8大基本数据类型:
-
整数:
1)byte 1字节
2) short 2字节
3) int(默认) 4字节
4) long 8字节 -
浮点数:
- float 4字节
- double(默认) 8字节
-
字符:char 2字节
-
布尔型:boolean 1位
各类型的最大值与最小值
public static void main(String[] args){
//byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
//short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
//int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类: java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
//long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
//float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
//double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类: java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
//char
System.out.println("基本类型:char 二进制数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
//以数值形式而不是字符形式将Chracter.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE=" + (int)Character.MIN_VALUE);
//以数值形式而不是字符形式将Chracter.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE=" + (int)Character.MAX_VALUE);
}
类型使用实例
public static void main(String[] agrs){
//整型
int i1 = 100;
//长整型
long i2 = 998877665544332211L;
//短整型
short i3 = 235;
//浮点型
double d1 = 3.5; //双精度
double d2=3;
float f1 = (float)3.5; //单精度
float f2 = 3.5f; //单精度
//布尔型 boolean true真/flase假
boolean isPass=true;
boolean isOk = false;
boolean isBig = 5>8;
if(isPass){
System.out.println("通过了");
}else{
System.out.println("未通过");
}
//单字符
char f = '女';
char m = '男';
}
什么是字节
- 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数
- 字节(byte,B):是计算机上数据处理的基本单位 ,习惯上用大写B表示
- 1B(byte) = 8bit,1字节等于位。
- 字符:指计算机中使用的字母、数字、字和符号
- 1bit表示1位
- 1byte表示一个字节 1B=8b
- 1024B = 1KB, 1024KB = 1M, 1024M = 1G
整型拓展
二进制:0b 开始
八进制 :0 开始
十进制 :10 ,99
十六进制:0x 开始
浮点型拓展
浮点类型float、double的数据不适合在不容许舍入误差的金融计算领域。
如果需要进行不产生会舍入误差的精确计算,需要使用Bigdecimal类。
//浮点型拓展
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d); //false
float d1 = 2131231231f;
float d2 = d1 + 1;
if(d1==d2){
System.out.println("d1==d2");//d1==d2
}else{
System.out.println("d1!=d2");
}
最好完全避免使用浮点数比较!
大数值: Java.math下面的两个类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
字符型拓展
单引号用来表示字符常量。例如'A'是一个字符,它与"A"是不同的,"A"表示一个字符串。
char类型用来表示Unicode编码表中的字符。
Unicode编码被设计用来上处理各种语言的所有文字,它占2个字节(2字节=16位 2的16次方=65536),可允许有65536个字符;
//字符拓展
char c1 = 'a';
char c2 = '中';
char c3 = '\u0061';
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c2);
System.out.println((int)c2);
System.out.println(c3);
Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为
u表示Unicode)
char c3 = '\u0061';
System.out.println(c3); //a
常用的转义字符
/*
\b 退格(Backspace) \u0008
\n 换行 \u000a
\r 回车 \u000d
\t 制表符(tab) \u0009
\' 双引号 \u0022
\" 单引号 \u0027
\\ 反斜杠 \u005c
*/
布尔型拓展
boolean类型(一位,不是一个字节),就是0 | 1
boolean类型有两个值 ,true和false,不可以0或非 0 的整数替代 true 和 false, 这点和C语言不同。
boolean 类型用来判断逻辑条件,一般用于程序流程控制。
boolean falg = false;
if(falg){
//true分支
}else{
//false分支
}
类型转换
由于java是强类型语言,所以进行有些运算的时候,要用到类型转换。
整型、实型(常量)、字符型数据可以混合运算。
运算中,不同的数据先转化为同一类型,然后进行运算。
转换从低级到高级(根据容量来看)。
低 ------------------------------------> 高
byte,short,char->int ->long ->float -> double
数据类型转换必须满足以下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度,例如:
int i = 128;
byte b = (byte)i; //byte类型是8位,最大值为127,所以当int强制转换为byte类型时,值128会导致溢出
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
(int) -45.89f = -45;
自动类型转换
自动类型转换:容量小的类型可以自动转换为容量大的数据类型。
char c1 = 'a'; //定义一个char类型
int i1 = c1; //char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于" + i1); //97
char c2 = 'A';//定义一个char类型
int i2 = c2 + 1; //char 类型和 int 类型计算
System.out.println("char类型和int计算后的值等于" + i2); //66
强制类型转换
强制类型转换,以被称为造型,用于显示的转换一个数值的类型。
在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或者溢出。
强制类型转换的语法格式:(type)var, type表示要将值var转换成的目标数据类型。条件是转换的数据类型必须 是兼容的。
double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b
当将一种类型强制转换成另一种类型时,而又超出了目标类型的表示范围时,变会被截断成为一个完全不同的的值 ,溢出。
int x = 300;
byte bx = (byte)x; //值为44
常见错误和问题
- 操作比较大的数时,留意是否溢出,尤其是整数操作时
int money = 1000000000; //10亿
int years = 20;
int total = money * years; //返回的是负数
long total1 = money * years; //返回的仍然是负数。默认是int,因此结果会转int值,再转long。但是已经发生了数据丢失。
long total2 = money*((long)years); //先将一个因子变成long,整个表达式发生提升。全部用long来计算。
System.out.println(total);
System.out.println(total1);
System.out.println(total2);
- L和I的问题
1)不要命名名字为I的变量
2)long类型使用大写L不要用小写。
int l = 2;
long a = 23451l;
System.out.println(l + 1); //3
System.out.println(a); //23451
JDK7扩展
JDK7新特性:二进制整数
由于我们在开发中也经常使用二进制整数,因此JDK7为我们直接提供了二进制整数的类型。
变量,常量
- 变量是什么:就是可以变化的量
- Java是一种强类型语言,每个变量都必须声明其类型
- Java变量是程序中最基本的存储单元,要素包括变量名、变量类型和作用域。
//数据类型 变量名 = 值;
type varName [=value][{,varName[=value]}];
//可以使用逗号隔开同时定义多个类型的变量,但不建议在一行定义多个变量
变量作用域
- 类变量(static)
- 实例变量
- 局部变量
public class Variable{
static int num = 0; //类变量
String str = "hello world"; //实例变量
public void method(){
int i = 0; //局部变量
}
}
常量
- 常量:初始化后不能再改变的值,不会变动的值。
- 可以理解为一种特殊的变量,其值被设定后,在程序运行过程不请允许我被更改。
//常量一般用大写字符
final 常量名=值;
final double PI=3.14;
//修饰符 不存在先后顺序,static可以写final后面
static final double PI=3.14; //类变量,该类下的全局范围
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写 + 驼峰原则:lastName
- 局部变量:首字母小写 + 驼峰原则
- 常量:首字母大写和下划线:MAX_VALUE
- 类名:首字母大写+驼峰原则:Person,Student
- 方法名:首字母小写+驼峰原则:run(),fastRun()
运算符
自增自减运算符
// ++自增 --自减 单目运算符
int a = 3;
int b = a++; //b=a, a=a+1 先赋值 即b=3 a=4
int c = ++a; //a=a+1,c=a 先自增 即a=5 c=5
System.out.println(a); //5
System.out.println(b); //3
System.out.println(c); //5
//幂运算 2^3 2*2*2=8
double pow = Math.pow(2,3); //(底数, 指数)double型
System.out.println(pow); //8
//扩展:笔试题 i=5 s=(i++)+(++i)+(i--)+(--i) s=?
int i=5;
int s=(i++)+(++i)+(i--)+(--i);
System.out.println(s); //24
逻辑运算符
- && 逻辑与运算:两个变量都为真,结果为true
- || 逻辑或运算:两个变量有一个为真,结果为true
- ! 取反,真变为假,假变为真
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println(a&&b); //false
System.out.println(a||b); //true
System.out.println(!(a&&b)); //true
int c=5;
boolean d = (c<5)&&(c++<5);//第一个值为false,后面就不进行判定了
System.out.println(d); //false
System.out.println(c); //5 c++未执行
位运算
/*
A = 0011 1100
B = 0000 1101
A&B 0000 1100 按位与
A|B 0011 1101 按位或
A^B 0011 0001 异或
~B 1111 0010 非
面试题:2*8 怎么算最快? 2<<3
<<左移 *2 效率极高!!
>>右移 /2
*/
System.out.println(2<<3); //16
三元运算符
// x ? y : z
//如果x为真,则结果为y,否则为z
//if(x) y; else z;
int score = 80;
String type = score<60?"及格":"不及格";
System.out.println(type); //及格
包机制
-
为了更好的组织类,Java提供了包机制,用于区分类名的命名空间
-
包的语法格式:
package pkg1[.pkg2[.pkg3...]];
- 一般利用公司域名倒置作为包名; com.panbin.www
- 为了能够使用一个包的成员,需要在Java程序中导入该包
import package1[.package2...].(className|*); //通配符* 导入包下所有的类
JavaDoc生成文档
-
javadoc命令是用来生成自己API文档的
-
参数信息:
@author 作者名
@version 版本号
@since 指明最早用的jdk版本
@param 参数名
@return 返回值
@throws 异常抛出情况
/**
* @author Kuangshen
* @version 1.0
* @since 1.8
*/
public class Demo05 {
String name;
/**
* @author kuangshen
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
1.打开某个类所在的文件夹下的cmd命令行
2.输入:javadoc -encoding UTF-8 -charset UTF-8 Doc(类名).java
3.会自动生成该类有关的API文档,查看文件夹发现多了一文件
4.打开 index.htm (首页) 查看文档注释