java(02)
java基础语法
进制
常见的进制
十进制
满10进一 例如:1010,99,20(每位最大数字为9)
二进制
满2进一 在Java中可以一‘0b’开头定义二进制数(jkd1.6之后才支持)例如:0b1010
八进制
满8进一 最大数字7 在数字前加一个前导零表示数字为八进制 例如:077
十六进制
满16进一 范围 0 - 9 A(10) B(11) C(12) D(13) E(14) F(15) 可以用0x开头表示数字为16进制,例如 0x12345,0xAABB,0xFFFF
进制转换
十进制转二进制
除二取余法:
不停对数字除二,记录余数,直到除数为0。将余数倒写为转换二进制的结果
例:
6 -> 0x110
8 -> 0x1000
21 -> 0x10101
其他进制与十进制的转换
可以参考二进制和十进制的转换
二进制转十六进制
四位二进制数转换为一位十六进制数。转换时可遵循8421原则。
例如:
1000 1010 1101 1001
8 A D 9
0x8AD9
二进制转八进制
三位二进制数转换为一位八进制数,转换时同样你可以遵循8421原则
例如
100 010 101 101
4 2 5 5
04255
十六进制八进制转二进制
为上面提到的两种抓换的逆过程,仅需将一位十六进制数、八进制数转换为4、3位二进制数
计算机内存存储方式
在计算机中,一个二进制位叫一个比特位,八个二进制位就会构成一个字节,字节是计算机中最小的数据存储单位
(2^10)1024个字节是1k
1024k 1M
1024M 1G
1024G 1T
1024T 1P
在内存中负数的存储为正数的补码
补码为源码逐位变反再加一
例如:
byte a = -3;
3 0000 0011
1111 1100
+ 1
---------------
1111 1101
在计算机中,正数的最高位(符号位)永远是0,负数永远是1
扩展
小数转二进制,乘二去整法
例如:
0.8125
0.8125x2=1.625 1
0.625x2=1.25 1
0.25x2=0.5 0
0.5x2=1.0 1
0.8125 ->0.1101
标识符
标识符就是用来定义自定义命名的规则 比如 类名 函数名 变量名…
规则:
由字母(A-Z a-z),数字 下划线_ 或 $ 组成,数字不能放在第一位
不能和关键字相同(class public static void …)
严格区分大小写,汉字也可以
关键字表
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
正确的标识符:name、Name、user_name、$name、_name、publicName、name999、L9、中国
错误的标识符:9username、public、user name、#name
对于命名还有一定的原则,可遵守可不遵守,是业内约定俗成的事
原则一:尽量见名之意
原则二:尽量符合驼峰标识
比如:类名 CatDog (大驼峰)
函数名 catDog (小驼峰)
变量名 小驼峰
byte dog=-3;
变量
变量就是为了用来存储数据的
在java中,变量一共分为两种类型(基本数据类型 引用数据类型)
基本数据类型
整数型
byte 1个字节 存储有符号整数(有符号就是有正负之分) -128~127
比如:
byte a; //变量的声明,没给值叫声明
a=127; //ok 赋值
byte a=127; //定义 给了值就是定义
byte a=128; //error
short 2个字节 存储有符号整数 -32768 32767
short a=-32767; //ok
short a=-32769; //error
int 4个字节 有符号整数 2147483647 到 -2147483648 之间
int a=127;
long 8个字节 有符号整数 9223372036854775807 到 -9223372036854775808 之间
long a=9;
long a=9L; //L大小写不区分,代表这是一个long类型的数
//这两种写法有什么区别?
首先我们得先知道,在java中,编译器在编译期认识常量
认为所有的整数默认都是int类型,
所以 long a=9; 意思是把一个int类型的9赋值给 long类型的a
long a=9L;代表把一个long类型的9赋值给long 类型的 a
浮点型
float 4个字节 ,又称为单精度 ,有效位 8个
float a=3.14; //所有的小数,默认都是double类型
float a=3.14f;
float a=34; //ok 隐含变成 34.0f;
double 8个字节 又称为双精度 ,有效位 16个
double a=3.14;
double a=3.14d;
double a=1; //ok 隐含变成 1.0;
字符型
char 2个字节
特点:1.可以存一个字符,一个字符是两个字节
2.可以存储无符号整数并且可以参与运算
char a='f'; //ok
char a='浮'; //ok
char a='特点'; //error
char a=' ';
char a=''; //空字符这么表示 不行编译报错
char a='\u0000'; //应该这么表示,\u 开头的是unicode编码 \u0020
附:\u0000打印的时候,发现是一个空格,是因为java对win7以上系统做了手脚,把空字符用空格显示了,实际还是空字符
char a=90; //ok
char a=-90; //无符号只可以是正数
问:char 类型最大能装的数字是多少?65536 ,因为是两个字节的,而且还无符号,所以最大是65535
char a=65536; //error
char a=65;
int b=5;
System.out.prinlnt(a+b);//70
char a='A';
int b=5;
System.out.println(a+b); //70 所有字符在参与运算时,都会变成对应的码表值才进行
char a='A';
char b='B';
System.out.println(a+b); //65+66
布尔型
布尔型
boolean 1个字节/4个字节 //因为虚拟机的不同,底层字节数可能就不同,所以不重要
只可以有两个值 false true
boolean a=false;
boolean a=true;