java基础笔记-基本语法
二 Java 基本语法
1.关键字和保留字
1.1关键字
1.1.1 import
J2SE 1.4 开始,Java 编译器不再支持 import 进未命包名的类、接口
1.1.2定义数据类型:
? class interface enum byte short int long float double char boolean void
1.1.3定义流程控制
? if else switch case default while do for break continue return
1.1.4定义访问控制权限
? private protected public
1.1.5 true false null
? true false null
1.2保留字
? goto const(命名的时候要避开)
2.标识符 Identifier
2.1命令规则:
? a-z,A-Z 0-9 _ $
? 数字不能开头
? 不能用关键字 保留字 空格
? 严格区分大小,长度不限制
2.2命名规范
? 包名:多单词组成时,全小写
? 类名,接口名:多单词组成时,大驼峰XxxYyyZzz
? 变量名,方法名:多单词组成时,小驼峰:xxxYyyZzz
? 常量名:所有字母都大写,且单词之间有下划线,XXX_YYY_ZZZ
3.变量
? 数据类型 变量名 = 变量值;
3.1 基本数据类型
-
整型:
byte 1字节 -128~127 short 2字节 int 4字节 -231~231-1(约21亿) long 必须以L或l结尾 8字节 long t1=12; //不报错,因为自动类型转换 long t2= 11294423234342; //报错,
byte b=12; // byte b1=b+1; // 编译失败,因为1是int型 float f=12.3; float f1=f+213.3; // 编译失败,因为213.3是double型
-
浮点型
float 声明必须以F f结尾 4字节 -3.403E38 ~ 3.403E38 尾数精确到7位 double(默认) 4字节 -1.798E308 ~ 1.798E308 不仅表示范围大,而且精度高
float f=12.34; //错误,类型错误,12.34默认为double
-
字符 转义字符**
一个字符两个字节,包含三种形式
a. char c = ‘中’;
b. 直接使用unicode值来表示一个字符常量: '\uXXXX' 如'\u000a'表示'\n'
c. 转义字符 '\n' '\t'
-
Boolean
true 和false C语言中使用01,C语言要用True和False需要先引用包
3.2 引用数据类型
? class (字符串输入类)
? interface
? 数组 [ ]
3.3 引申:编码问题:
? 不同的底层的01序列定义为不同的字符
? 但是所有编码格式对英文的编码好像都是固定的????
? ASCII编码
? 7位二进制->128种状态 ,占用一个字节的大小,第一位规定为0 不同国家的ASCII编码不一样,就会乱码
? Unicode编码
? 统一全世界所有的符号,所以unicode没有乱码问题
? 但是,unicode定长,英文字母编码只需要1字节就可以,导致前面的0的浪费,
? 二是无法区分unicode和ASCII
? UTF-8(Unicode的一种实现方式)
? 变长编码,1-6字节,根据不同符号而变化字节长度
? 规则:
? 单字节的UTF-8编码,最高位为0,其余7位进行编码(等同于ASCII)
? 对于n字节编码,
? 第一个字节的前n位为1,第一个字节的n+1位为0,剩余位进行信息的编码
? 剩余字节,最高位两位都是10,剩余6位进行信息编码
命令行乱码问题
? 使用utf-8编码,在命令行运行,中文的字符串会乱码,但使用ASCII编码就不会
? 原因,命令行默认使用GBK编码格式,对代码进行解码,中文就会乱码
? 但是使用ASCII编码保存,其实中文系统使用的还是GBK(英文系统才会用ASC),所以没问题
3.4引申:String字符串
? String不是基本数据类型,他是个类
? String可以和8种基本数据类型做运算,且运算只能是连接运算 +
int num =1001;
String str="num";
String info = str+ num;//"num1001"
char c = 'a';
System.out.println(c + num + str);//1098num
System.out.println(c + str + num);//anum1001
System.out.println(c + (num + str));// a1001num
System.out.println(str + num + c);// num1001a
3.5 类型转换
1.自动类型转换(提升)
byte b=2;
int a=b;
long c=a;
float d=c; //自动补一个.0
double e=d;
? byte/short/char --> int --> long --> float --> long
? 这三个做运算后起步就得是int
2.强制类型转换
? 自动转换的逆运算
? 情况1,没有溢出
? 截断操作,绝对不是四舍五入!!!
double d=10.0;
int x=(int)d;
? 情况2:溢出了
? 出错
int i=102;
byte b=(byte)i;//b = -128
3.6 进制转换
? 二进制,以0b或者0B开头
? 八进制:以数字0开头
? 十进制
? 十六进制:以0x或0X开头
4.运算符
4.1算数运算符
? + - * / % ++ ++ -- -- +字符串连接
4.2赋值运算符
? = += -= *= /= %=
4.3 比较运算符
? == != <= >=
4.4 逻辑运算符
? &与 | 或 ! 非 && 短路与 前面为假就不运行后面的了 || 短路或 ^ 异或 俩不一样为真
4.4. 位运算符
? <<左移乘2 >>右移除以2 >>> 无符号右移 & 6&3=7 按位与 | ^ ~
4.5 三元运算符
三元运算符和二元运算一样,也要统一类型,做自动提升
Object o= true ? new Integer(1) : new Integer(2.0);
sout(0) //1.0
5.流程控制
? 略
5.1引申:Scanner声明
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
5.2 break和continue
label:for(){
for(){
pass;
break label;//结束的是外圈循环
continue label;//同上
}
}