1.8 Java中常用的工具命令:bin
javac 编译指令
java 运行指令
javadoc 生成帮助文档【说明书】
javadoc -d 文件夹名字 xxx.java
jar 生成可执行的压缩归档文件
jar cvf 新的名字.jar xxx.class
双击可执行方法:
右击生成的jar包,用winRAR打开,双击META-INF,在MANIFEST-MF中最后一行添加:Main-class: 类名
native2ascii 得到一个元素的Unicode编码
1.9 数据类型
Java是一种强类型的编程语言,所有的变量在第一次出现的时候必须有数据类型
苹果:一个英文/中文-》2个字节/16位 :Unicode
windows:一个英文1个字节/中文2个字节 :ascii
**小练习:**TestDataType.java
public class TestDataType{
public static void main(String[] args){
Student stu = new Student();
int x = 034; //八进制赋值
int y = 0x34; //十六进制赋值
int z = 34; //十进制赋值
char a = '\u5520'; //Unicode赋值
double c = 45.5D; //双精度浮点型
float d = 11.1F; //单精度浮点型
System.out.println(3200000000.0);//3.2E9 = 3.2 * 10(9)科学计数法
String b = "张三\t100分\n王五\t98分\n";
System.out.println(x+"\t"+y+"\t"+z+"\t"+a+"\n"+b);
stu.name="张三";
stu.age=23;
stu.blood='o';
stu.sex='女';
stu.showInfo();
stu.isMarried=false;
if(stu.isMarried==false){
System.out.println("未婚");
}else{
System.out.println("已婚");
}
System.out.println("D:\\\\课件\\et2106\\day3\\TestDataType3.java"); // 一个\是转义字符,想输出\\则需要\\\\四个,成对出现
}
}
class Student{
public int age;
public String name;
public char blood;
public char sex;
public boolean isMarried;
public void showInfo(){
System.out.println(name+"\t"+age+"\t"+blood+"\t"+sex);}
}
基本数据类型转换:
char[16]
byte[8] short[16] int[32] long[64] float[32] double[64]
-
左边【取值范围小的】给右边【取值范围大的】赋值,可直接赋值;
-
右边【取值范围大的】给左边【取值范围小的】赋值,需要强制类型转换;
-
char类型与short类型同级别,相互转换需要双向转换,他们属于交集关系;
-
char与byte也永远需要双向强转;
public class TestOperation1{ public static void main(String[] args){ System.out.println(1 + 1);//2 System.out.println(1 + "1");//11 System.out.println(1 + 1 + "1");//21 System.out.println(1 + "1" + 1);//"11" + 1 = 111 // int + char + String // 1 + 49 = 50 + "1" = 501 System.out.println(1 + '1' + "1"); System.out.println(1 + "1" + '1');//"11" + '1' = 111 // 所有的运算符最小的处理单位是int // int + int + String // 49 + 49 + "1" = 981 System.out.println('1' + '1' + "1"); } }
int price = 500; //price = (int)(price * 0.7);//int = double price = price * 7 / 10;//整型 //一个文件1024K 已经下载了512K 问下载了百分之多少? System.out.println(512 * 100 / 1024 + "%");//0% System.out.println(512 * 100 / 1024 + "%");//50%(扩大分子)
参数匹配2个原则:
-
就近原则(有两个选择,选最近的)
-
向上原则(有一个上级的,有一个下级的,选上级的)
-
public class TestDataType2{ public static void main(String[] args){ test(45);//test(char) } //[char] (int) long float [double] public static void test(char x){ System.out.println("第一个参数"); } public static void test(double x){ System.out.println("第二个参数"); } //(char) 【int】 long float 【double】 /* public static void test(double x){ System.out.println("第二个方法"); } public static void test(int x){ System.out.println("第一个方法"); } */
public class TestDataType3{
public static void main(String[] args){
short x = 200;//-32768 32767
byte y = (byte)x;//-128 127
/**
short x = 200;
200 = 128 + 64 + 8 = 0000000011001000
byte y = (byte)x;
11001000 -> y
11111111 -> -1-1-2-4-16-32 = -56
任何一个整数类型如果二进制位上全是1的话 表示该类型十进制的-1
byte:11111111 -> -1
short:1111111111111111 -> -1
11111111:x
+ 1
00000000 : 0
x + 1 = 0 x = -1
*/
System.out.println(y);
}
}
引用数据类型:
-
如何生成一个随机的三位数:
int x = (int)(Math.random() * 900 + 100); -
如何生成一个a-z里面的一个字母:
char y = (char)(Math.random() * 26 + 97);->[0,25] [97,122] -
如何生成一个A-Z里面的一个字母:
char z = (char)(Math.random() * 26 + 65);//[0,25] [65 90]
1.10 十进制与二进制转换
1.10.1 整数
正数:byte 125 = 64+32+16+8+4+1=01111101
负数:正数各位取反后加一
byte -125 = 10000011
01111101-》取反:10000010
加一:10000011
1.10.2 浮点数
float x = 75.75F;
1)整数部分与小数部分分别转换为二进制
70=64+4+2=1000110
0.75=11(0.75x2=1.5,0.5x2=1将小数部分乘以二取整直到没有小数为止)
70.75=1000110.11
2)转换为科学计数法:1.00011011*2(6)
3)对号入座:符号位1+幂指位8+数值位23
0 10000101 00011011 000000000000000
符号位1:正数位0,负数为1
幂指位8:127+6=133=128+4+1=10000101
数值位23:取小数点后面的数不足23位在后面补0
75.75F= 01000010100011011000000000000000
public class TestDataType{
public static void main(String[] args){
System.out.println(2.0-1.1);
}
}
-
2.0 - 1.1结果是多少?
反正不是0.9 -
为什么会出现这个错误的结果?
java中任何一个整数都可以用二进制精确的表达出来
但是不代表任何一个小数也可以在有限的位置里面表达出来
1.1在存储的时候 出现了数值位的截取 导致数值不正确 -
怎么解决?
数值扩大100倍 单位缩小100倍
BigDecimal : 大数值
import java.math.*;
public class TestDataType1{
public static void main(String[] args){
BigDecimal b1=new BigDecimal("2.0");
BigDecimal b2=new BigDecimal("1.1");
BigDecimal b3=b1.subtract(b2);
System.out.println(b3);
}
}