学习java第一个月 第三天

一.包名的避免

(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】
booleancharbyte 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.字节 位

byteshortintlong
字节1248
8163264

 

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.11

2.求出科学计数法

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.银行项目面试题 

  1. .2.0-1.1 最终的结果   0.9

  2. 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);
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值