以下代码A2讲述的是字面值、进制转换、数据类型、变量分类(成员变量以及局部变量):
public class A2 {
public static void main(String[] args){
//By Croaker~
/*
基本数据类型 占用空间大小【单位为字节】 默认值
byte 1 0
short 2 0
int 4 0
long 8 0
float 4 0.0f
double 8 0.0d
boolean 1 false
char 2 \u0000
默认值向0看齐
现代机算机底层采用交流电的方式,只有接通和断开两种状态,故:
计算机在任何情况下都只能识别二进制(满二进一)
字节(byte)
1 Byte = 8 Bit(比特单位)【一个比特位就是一个二进制位,即为一个0或1】
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
java的数字类型中,数字都是有正有负的,所以在二进制中有一个二进制位被称为“符号位”
该符号位在所有二进制位的最左边,0表示正数,1表示负数
*/
/*
基本数据类型的相互转换
八种基本数据类型除布尔类型外其他其中之间都可以相互转换
小容量向大容量转换,称为自动类型转换容量从小到大
byte < short (char) < int < long < float < double
注:
任何浮点类型不管占用多少字节,都比 整数型容量大
char和short可表示的种类数量相同但char可以获取更大的正整数
大容量转换成小容量叫做强制类型转换,需要加强制转换符,程序才能编译通过,但可能会损失精度,所以谨慎使用
数字没超出byte,short,char的取值范围时可以直接赋值给变量
多种数据类型混合运算先转换成容量最大的类型再做运算
*/
//整数存储类型
byte b = 127;
System.out.println(b);
//某二进制数有x位(bit)则它可表示数的范围是(十进制)-(2^x)~(2^x -1)
//取值范围从-128到127 由8位数构成
short p = 32767;
System.out.println(p);
//取值范围从-32768到32767 由16位数构成
int l = Integer.MAX_VALUE;
System.out.println(l);
//得到该类型所能存储的最大整数,32位
long q = Long.MAX_VALUE;
System.out.println(q);
//同样得到该类型所能存储的最大整数,64位
//未声明时程序以int形式存储
/*
1.要让整型字面值被当作long类型处理,则在其后加入L(大写)
2.Java语言中整型字面值有三种表示方式
二进制 以0b
八进制 以0开头 如:0 1234567
十六进制 以0x开头 如:0x AB564
十进制 缺省默认
输出时会以十进制的方式输出
*/
int igg = 123;
long xgg = 717189789;
System.out.println(igg);
System.out.println(xgg);
//123整型字面值被当作int类型,占用4个字节
//xgg变量在声明中为long类型,占用8个字节
//int(小容量)转换成long(大容量)类型称为自动类型转换机制
//直接书写以下代码会出错
//long MM = 214748364 虽然long类型能存储但因为其先默认被当作int类型处理故超出范围会报错
//所以应该像如下书写,才会以long类型解决
long mm = 214748364L;
System.out.println(mm);
//100L是long字面值,占8字节
//大容量转小容量,需要加入“强制类型转换符号”进行强转
//谨慎使用强转,因为有时损失进度会很严重
//强转原理
/*原始数据:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
强转之后数据:
00000000 00000000 00000000 01100100
即将左边的二进制去掉【所有数据的强转都是如此完成】
*/
long cad = 100L;
//不强转则会报错(编译错误),强转后可能会损失精度
//int yzz = cad;
int yzz = (int)cad;
System.out.println(yzz);//当数据属于待转型能表示的范围时就不会损失数据
//原始数据:00000000 00000000 00000000 00000000 100000000 00000000 00000000 00000000
//强转后数据: 100000000 00000000 00000000 00000000
//计算机存储时所用的是补码
long kx = 2147483648L;
int yx = (int)kx;
System.out.println(yx);//损失严重,结果是负数【-2147483648】
//字面值未超过byte、short、char类型的范围时则可以直接赋值变量;
//若超出则需要强转
byte bo =50;
System.out.println(bo);
//小数存储类型(在计算机中都是以二进制储存近似值)
float f = 3.14f;//单精度
double d =3.14d;//双精度0
System.out.println(f);
System.out.println(d);
//对于浮点型数据存储,系统默认为double类型
//所以如果使用float类型(32λ)在数字后面需要加上f而对于double类型(64位)其数字后的d通常会省略
//字符型所存必须放在''其中
//字符类型
char c = 'h';
char t = '哈';
char m = 97;
//可以用ASCII代替某些常用字符
//记以下的ASCII码值,其他的可以推出
//'a'-----> 97
//'A'-----> 65
//'0'-----> 48
System.out.println(c);
System.out.println(t);
System.out.println(m);
//java程序中的字符类型0可以存放汉字
//汉字在Java中占两字节 00 (每字节占用8位)
//char类型共有16位
//boolean在开发中经常使用逻辑运算和条件控制语句
boolean a = false;
System.out.println(a);
//默认为false,相当于C语言中的0=false以及1=true,共占8位,一个字节
//boolean flag = 1;编译错误:不兼容类型
//在C语言中可以通过把数字放前,变量放后的方法来避免漏写一个等号
int x = 0;
if(x == 0)
System.out.println("Hello");
//而在java中若只出现一个等号则编译器会报错
//在Java中""号中不能只出现空格(""号中存储字符串;''号中存储字符)
//charAt(i)是逐一输出字符串中的单个字符
String s ="Hello World";
//字符串属于引用数据类型
for (int i=0; i<s.length();i++);
//System.out.print(" "+ s.charAt(i));
//System.out.print(s.charAt(i) + "");
//System.out.print("" + s.charAt(i) + "");
//三者结果不一样
//println 输出数据并转行相当于C中的printf和/n
//print 只是单纯地输出数据
}
}
/*
关于字面值
字面值
如:10、100
3.14
"abc"
'a'
ture/false
字面值就是数据
为Java源程序的组成之一
数据在现实世界中有分门别类,所以数据在计算机编程语言中有类型
10、100 整数型
3.14 浮点型
ture、false 布尔型
"abc"、"中国" 字符串型
'a'、'人' 字符型
注意:
Java语言当中所有字符串型均应使用双引号括起来,双引号为半角(英文输入)
Java语言当中所有字符型均应使用单引号括起来,单引号为半角(英文输入)
System.out.println('ABA');
编译会报错,因为单引号中只能存放单个字符,属于字符型字面值
100是一个字面值,是一个整数型数值,那么既然是数据就需要存储在内存中,必会占用一定空间
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
上述相同的100访问的空间在不同的内存空间中
上述四个100(常量)共需占用12个字节
如需重复访问则需要利用到变量
变量的分类
根据变量声明的位置分为:
局部变量:在方法体中声明的变量
成员变量:在方法体外【类体之内】的变量
*/
class A2_1{
//成员变量
int k = 200;
//主方法:入口
public static void main(String[] args){
//i变量就是局部变量
int i = 10;//第一个i
System.out.println(i);//就近,即访问上一条代码中的i=10
}
//类体中不能直接编写Java语句【声明变量除外】
//成员变量
int i = 100;//第二个i
//doSome方法
public static void doSome(){
//局部变量
int i = 90;//第三个i
System.out.println(i);
}
}
//上述代码中因为i的作用域不同,故上述对于不同类的变量可以定义相同名字的变量
//Java遵循就近原则