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 基本数据类型

  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型
    
  2. 浮点型

    float 声明必须以F f结尾 4字节 -3.403E38 ~ 3.403E38 尾数精确到7位
    double(默认) 4字节 -1.798E308 ~ 1.798E308 不仅表示范围大,而且精度高
float f=12.34; //错误,类型错误,12.34默认为double
  1. 字符 转义字符**

    一个字符两个字节,包含三种形式

    a. char c = ‘中’;

    b. 直接使用unicode值来表示一个字符常量: '\uXXXX' 如'\u000a'表示'\n'

    c. 转义字符 '\n' '\t'

  2. 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;//同上
	}
}