一.包名的避免
(1).避免使用com0---com9 预留出给打印设备
(2).null 空设备
(3).con 网络设备
方法的参数:传递进去的数据
返回类型:返回数据的类型
二.数据类型
1.什么是数据类型?
数据类型实际就是数据的单位,java是强类型的语言,每一个变量在第一次出现的时候必须有数据类型
2.面试题:java中的数据类型有哪些?
2种/无数种
2种指的是:
基本数据类型(简单数据类型)
引用数据类型(自定义数据类型、复杂数据类型) String 引用数据类型
Sun公司大约提供了3500个,有时并不能满足需求,Sun公司允许程序员自己定义新的数据类型
无数种
主要指的是引用数据类型-----程序员自己定义的,例如 Student stu=new Student();
3.java中的基本数据类型
4类八种
布尔类型 | 字符类型 | 整数类型【默int】 | 浮点类型【默double】 |
boolean | char | byte short int long | float double |
4.布尔类型 boolean java中最简单的数据类型
区分c/c++
只有两种赋值方式 true false 不可以使用整数赋值给boolean类型!!!
没有明确boolean 但是表达了布尔类型的 if条件
5.字符类型char类型
底层基于Unicode编码,不区分中英文底层都是两个字节[0-65535] 2^16
字符类型-长度是1的数据
‘a’,’b’ --两个字节 ‘中’ --两个字节 16位
字节是什么? 1个字节对应八位二进制
对于ASCII编码来说
一个英文字母是一个字节 8位
一个中文是两个字节 16位
所谓的乱码是指 编码不同 写的时候Unicode 读的时候Ascii就会乱码
char类型的赋值方式
(1).指定字面值的赋值方式
char c1=’中’; char c2=’a’;
(2).SCJP 使用ascii编码进行赋值
//数据类型一致
//char int
char c1=97; //97->> ‘a’
char c2=-122; 出现错误
ASCII
a-z 97--122
A--Z 65--90
0-9 48--57
(3).使用Unicode编码
中文的范围【\u4e00--\u9fa5】
char c1='\u4e2d'; ‘中’
(4).使用转义字符进行赋值
/**
\t \n \b \r
制表符tab 换行 退格 返回首行
**/
char c4='\t';System.out.println("c:\\programfile\\etoak.com");
6.整数类型【int默认】
1.字节 位
byte | short | int | long | |
字节 | 1 | 2 | 4 | 8 |
位 | 8 | 16 | 32 | 64 |
2.取值范围
byte 8 -2^7------2^7-1 -128-----127
short 16 -2^15-----2^15-1 -32768---32767
int 32 -2^31----2^31-1 -2147483648-----2147483647 [21亿]
long 64 -2^63---2^63-1
使用long的时候后面数据要加L
long num=400L;
注意
byte x=45; x在-128---127范围内 可以直接复制
byte x=128; 则不可以
计算过程中发生越界的时候,及时转换为取值范围大的数据类型
System.out.println(365L*100000000000000000000000000000);
Long*int---->long*long---->long
3.进制
二进制 0 1 逢2进一 0b开头 二进制中没有2
八进制 0开头 八进制中没有8 080 是错误的
十进制
十六进制 0x开头
以下是 123 -78 二进制表示
128 64 32 16 8 4 2 1
0 1 1 1 1 0 1 1
123-64=59-32=27-16=11-8=3
123二进制: 0111 1011
78: 0100 1110 求-78 先求78原码 取反 + 1
-78: 1011 0010
7.浮点类型(double默认)
浮点类型 (小数 ) float double 二进制表示符号位1+幂指位n+数值位
float 赋值的时候要带F/f double 赋值的时候要带 d/D 默认为double 可加可不加
4字节 8字节
32位 64位
float 符号位1+幂指位8+数值位23
double 符号位1+幂指位11+数值位52
float f1=45.5f; //数值的后面加F/f
System.out.prinln(23000000.0); //2.3E7 E是10的几次方 科学计数法
8.小数转二进制
float x=42.25;
float 二进制 【1负数 0正数】
float 符号位1+幂指位8+数值位23
1.将小数点左右两侧数据转化为二进制
45=32+8+4+1 0010 1101
0.25 乘2取整
0.25*2=0.5 取0
0.5*2=1 取1
0.25对应的二进制01
45.25 二进制 101101.01
2.将第一步的数据转换科学计数法
101101.01=1.0110101*2^5
3.对号入座
符号位1+幂指位8+数值位23
0 1000 0100 01101010000000000000000
幂指位计算
127固定 +5=132=128+4==1000 0100
42.25 二进制: 01000010001101010000000000000000
Float x=23.75
1.分别求出整数和小数的二进制
23=16+4+2+1= 0001 0111
0.75 *2=1.5 1
0.5*2= 1 1
23.75=10111.112.求出科学计数法
10111.11=1.011111*2^4
3.根据公式安排吧
幂指位 127+4=131=128+3=1000 0011
符号位1+幂指位8+数值位23
0 10000011 01111100000000000000000
0_10000011_01111100000000000000000
练一个 23.1
1.
23=16+4+1 0001 0101
0.1 *2=0.2 0
0.2*2=0.4 0
0.4*2=0.8 0
0.8*2=1.6 1
0.6*2=1.2 1
23.1= 10111.00011[0011] 一直循环括号的
2.
10101.00011=1.011100011*2^4
幂指为
127+4=131=128+3=1000 0011
符号位1+幂指位8+数值位23
0_10000011_011100011 0011 0011 001100
9.银行项目面试题
-
.2.0-1.1 最终的结果 0.9
-
2.为什么会有这样的结果 0.899999999
在java中一个整数可以使用二进制进行精确表示 但是并不意味着所有小数都可以使用二进制精确表示 1.1在底层存储的时候发生数值为的截取
System.out.println(2.0-1.1)
3.怎么解决呢
第一种 公交卡原理 100元-0.7元 1000角-7角
第二种 利用BigDecimal 解决精度损失
import java.math.*;
public class TestDataType2{
public static void main(String[] args){
BigDecimal b1=new BigDecimal("2.0");
BigDecimal b2=new BigDecimal("1.1");
//基本数据类型使用 2.0-1.1
//BigDecimal 不能使用- 减号
//public BigDecimal subtract(BigDecimal subtrahend)
BigDecimal b3=b1.subtract(b2);
System.out.println(b1.subtract(b2));
}
}
float f1=2.0F;
float f2=1.1F;
System.out.println(f1-f2);//也有精度损失 只是恰好答案正确了
10.薪资问题
BigDecimal简单 加减乘除
import java.math.*;
public class Exec2{
public static void main(String[] args){
BigDecimal b1=new BigDecimal("10");
BigDecimal b2=new BigDecimal("2");
// + - * /
//public BigDecimal add(BigDecimal augend) +
System.out.println(b1.add(b2));
//public BigDecimal subtract(BigDecimal subtrahend) -
System.out.println(b1.subtract(b2));
//public BigDecimal divide(BigDecimal divisor) /
System.out.println(b1.divide(b2));
//public BigDecimal multiply(BigDecimal multiplicand) *
System.out.println(b1.multiply(b2));
}
}
import java.math.*;
//原来薪资是5050.5 如果周老师是男,则薪资增加百分之1
public class Exec3{
public static void main(String[] args){
Teacher t1=new Teacher();
t1.name="周老师";
t1.gender='男';
t1.salary=new BigDecimal("5050.5");
BigDecimal b1=new BigDecimal("1.1");
if(t1.gender=='男'){
t1.salary=t1.salary.multiply(b1);
}
System.out.println(t1.salary);//显示5555.5
}
}
class Teacher{
//属性
String name;
char gender;
BigDecimal salary;
}
11.堆栈图
12.基本数据类型之间的转换
byte short int long float double 类型从小到大
1.关于从小类型到大类型时
不需要自动强转 自动转化
byte b1=15;
int myInt=b1;
short myShort=b1;
2.关于从大类型转化成小类型时
,需要强转
int myInt=16;
byte myByte=(byte)myInt;
short myShort=(short)myInt;
3.关于char byte short 之间的类型
public class TestDataType10{
// 数据类型之间的转换
// byte char
// short char
public static void main(String[] args){
// byte => char 需要强转
byte b1 = 97;
char c1 = (char)b1;
System.out.println(c1);
// char => byte 需要强转
char c2 = 'A';
byte b2 = (byte)c2;
System.out.println(b2);
// short => char 需要强转
short s1 = 99;
char c3 = (char)s1;
System.out.println(c3);
// char => short 需要强转
char c4 = 'C';
short s2 = (short)c4;
System.out.println(s2);
}
}
4.关于int类型 char类型之间的转化
4.1如果没有指定数字是int类型并且在char所范围之内 不需要强转 char [0 65536]
char c1=97;
public class TestDataType11{
// 数据类型之间的转换
// int char0-65535
public static void main(String[] args){
// int => char 大=》小
// 如果拿着整数直接给char类型进行赋值
// 如果整数在char类型的范围内 理解为ascii=>字符=>char
// 如果整数不在char类型的范围内 理解为int
char c1 = 97;// 'a'->c1
System.out.println(c1);
int num = 97;
// char= int 强转
char c2 = (char)num;
System.out.println(c2);
char c3 = 'A';
// int = char 自动转换
int num2 = c3;
System.out.println(num2);
}
}