day_02 数据存储、数据类型、变量、运算符

本文详细介绍了Java中的数据类型,包括基本数据类型如整型、浮点型、字符型和布尔型,以及它们的存储方式、进制表示、命名规则和使用。此外,还讲解了数据类型转换、混合运算、变量和常量的概念,以及各种运算符的用法,如算术、关系、逻辑和位移运算。内容深入浅出,适合初学者理解掌握Java的基础知识。

1.数据类型

1.1数据存储

   程序:就是一堆命令的集合.一般是个可执行文件

   1 数据是先存储再运算

    2 存储方式

       内存:两端无限延伸的线

       硬盘:螺旋线

     3 存储单位

       Bit=比特=位

       Byte=字节=8bit  -128~127为了保存正负数,只能丢失一半精度,最高位作为符号位

       1代表负数 0代表正数

        负数存储的时候存补码

        例如 2:0 0000010

                -2:1 0000010(源码)->1 1111101(反码)->1 1111110(补码)(反码加一)

        Short 短整型=2byte=16bit

         int 整型=4byte=32bit

         Long 长整型=8byte=64bit

1.2进制

二进制 : 0   1 java没有办法直接表示二进制

八进制 : 0~7   , 逢8进一 , java中里面如果数据是以 0开头 表示八进制 012

十进制 : 逢10进1 , java里面数据非0开头,都是10进制  2450 

十六进制 : 逢16进1,a表示10,b表示11....f表示15 , java里面数据以0x开头,表示16进制   0x12

1.3数据类型分类

      引用数据类型:类,数组,接口

      基本数据类型

           数值型 byte short int long

          浮点型 float double

           字符型 char

           布尔型 boolean

Byte:字节 8位

Short:短整型 16位

int:整型 32位

Long:长整型 64位

Float: 单浮点 32位

Double:双浮点 64位

Char: 字符 16位

Boolean:布尔型 8位   只有两个 00000001代表ture 00000000代表false

ASCLL码 常用的几个 0:48     A:65      a:97

1.4命名规则

所有需要我们命名的地方,都适用:变量名,类名,文件名,文件夹名,方法名

强制:只能出现 大小写字母,美元符号$,数字,下划线_,且数字不能开头

不能使用关键字和保留字,(不能只使用关键字和保留字,关键字1 是可以)

关键字 : 就是java中目前已经使用的有代表意义的单词

保留字 : 就是java目前还没有使用的关键字,但是在后续版本可能

 非强制:望文知意;驼峰命名法

1.5数据类型使用

1)整数型

package daily_text;

public class Text1 {
	/**
	 *整数型
	 */
	public static void main(String[] args) {
		//用Byte申请一个空间,命名为byte_1,将127放到空间里
		byte byte_1 = 127;
		//打印空间中内容
		System.out.println(byte_1);
		//十进制
		int int_1 = 6666;
		System.out.println(int_1);
		//八进制
		int int_2 =0163;
		System.out.println(int_2);
		//十六进制
		int int_3 =0x3b;
		System.out.println(int_3);
		//短整型
		short short_1 = 666;
		System.out.println(short_1);
		//长整型,需要加L/l建议大写,因为小写和1不好区分
		//如果不L那么其中值为int值,只不过自动类型转换为了long类型
		long long_1 = 1008611L;
		System.out.println(long_1);
		//打印长整型最大值
		System.out.println(Long.MAX_VALUE);
	}

}

2)浮点型

package daily_text;

public class Text2 {
	/**
	 * 浮点型
	 */
	public static void main(String[] args) {
		double double_1 = 6.6;
		//可以加D/d,一般情况下不加
		double double_2 =6.6D;
		//Float需要加F/f,是因为如果不加就默认是double类型的小数
		//加F说明是float类型的值
		float float_1 = 1.2f;
		//强制转换,把double类型的值转换为float类型
		float float_2 =(float)1.2;
		System.out.println(double_1);
		System.out.println(double_2);
		System.out.println(float_1);
		System.out.println(float_1);

	}

}

3)字符型

package daily_text;

public class Text3 {
	/**
	 * 字符型:char,使用单引号表示,并且单引号中有且只有一个字符
	 * java中的字符型采用unicode编码
	 * short 16位 -32768~32767
	 * char 16位 0~65535 因为没有负数
	 */
	public static void main(String[] args) {
		char char_1 ='a';
		int int_1 =char_1;
		System.out.println(int_1);
		char char_2 = '张';
		//空格也算一个字符
		char char_3 =' ';
		System.out.println(char_2);
		System.out.println(char_3);
		}
}

打印结果(可见空格也算一个字符)

4)转义符

package daily_text;

public class Text4 {
	/**
	 * 转义符:\把有意义的字符转换为无意义的字符
	 */
	public static void main(String[] args) {
		//用转义符\将'变得无意义使其成为单纯的字符
		char char_1 = '\'';
		//字符串类型,用双引号表示
		String str_1 ="wfuabf54876@#!";
		//用转义符\将"变得无意义使其成为单纯的字符
		String str_2 ="\"";
		//用转义符\将\变得无意义使其成为单纯的字符
		char char_2 ='\\';
		//制表符tab键
		char char_3 ='\t';
		//换行符
		char char_4 ='\n';
		//可以使用unicode编码"结果是溜溜球的溜"
		char char_5 ='\u6e9c';
		System.out.println(char_5);
	}

}

5)布尔型

package daily_text;

public class Text5 {
	/**
	 * 布尔型
	 * java中的boolean类型,取值只有两个true/false
	 * 占用1字节:全是0为false,00000001为true
	 * 布尔类型不能够参与任何类型的转换
	 * 一般用于流程控制,做判断操作
	 */
	public static void main(String[] args) {
		boolean br_1 = true;
		br_1 = false;

	}

}

1.6数据类型转换

package daily_text;

public class Text6 {
	/**
	 * 布尔类型不参与转换
	 * 自动类型转换:低精度到高精度是自动类型转换,又称为隐式转换
	 * byte>short>int>long>float>double
	 *            char>int>long>float>double
	 *强制类型转换:高精度到低精度是强制类型转换,又称为显式转换
	 *转换格式:低精度类型 名字 = (低精度类型)高精度值;可能导致数据出错
	 *int i1 = 12;
	 *byte b1 = (byte)i1;
	 */
	public static void main(String[] args) {
		byte b1 = 123;
		int i1=b1;
		short s1 = (short)i1;
		System.out.println(s1);
		int i2 =564763;
		byte b2 =(byte)i2;
		System.out.println(b2);

	}

}

转换结果

1.7混合运算

package daily_text;

public class Text7 {
	/**
	 * 混合运算
	 * 
	 */
	public static void main(String[] args) {
		byte byte_1 =10;
		int int_1 =20;
		double double_1 =30;
		//在混合运算中,结果是运算中精度最高的类型
		double result =double_1- byte_1;
		System.out.println(result);
		int int_2 =3;
		int int_3 =int_1/int_2;
		//结果取整,不会有余数
		System.out.println(int_3);
		//因为int_1/int_2结果为int类型的,人后吧结果自动转换为double类型的
		double double_2 =int_1/int_2;
		System.out.println(double_2);
		//当byte,short,char,int四种类型中任意一种或多种进行混合运算时,结果都为int类型
		byte byte_2 =1;
		short short_1 =2;
		int short_2 = short_1 + byte_2;
		System.out.println(short_2);
	}

}

 2、变量和常量

2.1常量和字面量

package daily_text;

public class Text8 {
	/**
	 * 常量:整个生命周期中,值不可更改
	 * 字面量:同上,并且不可以重复使用
	 */
	public static void main(String[] args) {
		//字面量,不可以重复使用
		//但是有类型有空间,不过是临时空间
		//整数默认int类型,小数默认double类型
		System.out.println(10);
		System.out.println(10);
		System.out.println(10);
	}

}

2.2变量

1)声明

package daily_text;

public class Text9 {
	/**
	 * 变量:可以更改的数据,方便对数据进行操作,并且可以对空间进行复用
	 * 变量声明:数据类型 变量名 = 值;
	 * int i=2;
	 */
	public static void main(String[] args) {
		//创建一个int空间,命名为i,并且赋值为10
		int i =10;
		//根据i找到对应的数据,并打印
		System.out.println(i);
		System.out.println(i);
		//更改空间值为2
		i = 2;
		System.out.println(i);
		System.out.println(i);

	}

}

2)变量分类

package daily_text;

public class Text10 {
	/**
	 * 变量分类:
	 * 局部变量:在方法中声明的变量是局部变量
	 * 静态变量:在类体中使用static声明的变量
	 * 成员变量:在类体中没有使用static声明的变量
	 */
	    //静态变量
	static int a = 2;
	   //成员变量
	int b = 10;
	public static void main(String[] args) {
		//创建一个int空间,命名为i,并且赋值为13
		int i =13;
		//根据i找到对应的数据,并打印
		System.out.println(i);
		System.out.println(i);
		//更改空间值为6
		i = 6;
		System.out.println(i);
		System.out.println(i);

	}

}

3)变量调用

/**
	 * 变量的调用:
	 * 局部变量:在方法中,直接写变量名调用即可,在方法外调用不了
	 * 静态变量:类名.静态变量名;当前类中,类名可以省略
	 * 成员变量:对象.成员变量名;
	 * 作用域:变量的适用范围,从变量声明处,向上走,碰到的第一个大括号,向下穿透
	 */

4)变量默认值

package daily_text;

public class Text12 {
	/**
	 * 默认值 ,局部变量没有默认值
	 * 静态变量和成员变量有默认值
	 * 		整数 : 0 
	 * 		小数 : 0.0
	 * 		布尔型 : false
	 * 		字符型 : \u0000
	 * 		引用类型 : null
	 */
	static int b;
	public static void main(String[] args) {
		// int a,b;
		//局部变量没有默认值,不赋值不能用
		int a;
		int i=1;
		System.out.println(i);
		System.out.println(b);
	}

}

3、运算符

3.1算术运算符

package daily_text;

public class Text13 {
	/**
	 * 算术运算符
	 * + - *  /  %
	 * ++   --
	 * ++:自身+1,把值取出+1后再放回去(会发生赋值)
	 *  一元(单目) 优先级 大于双目(二元)
     * 一元运算 就是指 有一个操作数 比如 i++
     * 二元 就是两个操作数 : a*b
	 */
	public static void main(String[] args) {
		int a =10;
		int b =3;
		// 因为是整数 所以 不要余数
		System.out.println(a / b);
		// 求余数
		System.out.println(a % b);
		int s = 100;
		// i++ 和 ++i 的区别 : i++ 先赋值后+1, ++i 先+1 后赋值
		// 如果单独出现,没有区别
		// s++;
		// ++s;
		// 代码从左到右执行初始化,先赋值 后++
		// s = s++ + 10;
		// s = 100 +10; s=101
		// s = 110
		s = s++ + s;
		// s = 100 + 101; s = 101
		System.out.println(s);
		int k = 100;
		// 先++ 再赋值
		k = ++k + k;
		// k = 101 + 101; k = 101
		System.out.println(k);
		int m = 10;
		int e = 2 + m++;
		System.out.println(m);
		System.out.println(e);
		int p = 2;
		// 先从左到右初始化在计算
		p = 2 + p++ + ++p + p++ + ++p;
		// p = 2 + 2 + 4 + 4 + 6; p = 6
		System.out.println(p);
		int x = 10;
		x = 10 + x++ + ++x + (10 * x++) + ++x;
		System.out.println(x);

	}

}

3.2关系运算符

package daily_text;

public class Text14 {
	/**
	 * 关系运算符:结果只能是布尔型
	 * >,<,>=,<=
	 * ==,判断时候相等
	 * !=:判断不相等
	 */
	public static void main(String[] args) {
		int a = 13;
		int b = 16;
		//false
		System.out.println(a > b);
		//true
		System.out.println(a < b);
		//false
		System.out.println(a >= b);
	}

}

3.3逻辑运算符

package daily_text;

public class Text15 {
	/**
	 * &:位与,两边都为真 结果才为真
	 * |:位或,一边为真,结果就为真
	 * !:位非,取反,真的是假,假的是真 !true=false
	 * ^:位异或,两边不一样结果才为真,true ^ false = true, true ^ true = false
	 * ~:按位非,按数值的进制位,进行取反
	 * ~2 : 2 的二进制 0 000 0010  每位取反 , 1 变0  , 0 变1
     * 	1 111 1101  -> 反码 -> 1 111 1100  -> 源码 -> 1 000 0011
     * && : 且 , 短路与  , 两边都为真结果才为真,假如第一个就为假了,第二个判断就不执行了,直接返回false
* || : 或 , 短路或 , 两边有一个为真,结果才为真,假如第一个就为真了,第二个判断就不执行了,直接返回true   
	 */
	public static void main(String[] args) {
		System.out.println(~2);
		// 如果 & 两边是数字 , 就变成了与运算
		// 转换为二进制,每位比较, 都是1 取1,否则 取0
		// 最终结果,不会超过两个数中最小的一个
		// 0 000 1000
		// 0 000 1001
		// 0 000 1000
		System.out.println(8 & 9);
		// false
		System.out.println(1>2 & 1<2);
		// true
		System.out.println(1>2 | 1<2);
		// true 
		System.out.println(1>2 ^ 1<2);
		// true
		System.out.println(!(1>2));

        int a = 10;
		int b = 10;
		// 第一个条件为false,第二个不执行了
		boolean c = (a > b && a > b++);
		System.out.println(b);
		// 如果一个运算中, && 和 || 都有,那么 && 优先级 大于 ||
		boolean flag = true || false && false;
		System.out.println(flag);
	}

}

3.4位移运算符

package daily_text;

public class Text16 {
	/**
	 * 位移运算
	 * 	<< : 左移运算(符号位不变) 转换为二进制,向左移位,最右边补0
	 * 		x << y  = x*2^y
	 * 		左移一次 等于 乘2
	 * >> : 右移运算(符号位不变) 转换为二进制,向右移位,最左边补0 , 如果是负数,最左边补1
	 * 		x >> y  = x/2^y
	 * 		右移一次 等于 除2
	 * 面试题 : 如何快速计算 2的3次方
	 * 		2<<2
	 */
	public static void main(String[] args) {
				System.out.println(-2 << 2);

	}

}

3.5赋值运算符

package daily_text;

public class Text17 {
	/**
	 * 赋值运算
	 * =
	 * += , *= , /= , -= , %=
	 * -= : 左边减去右边 结果赋值给左边
	 * i+=2;   等价于  i = i + 2;
	 */
	public static void main(String[] args) {
		int i = 10;
		// 等于 i = i + 10;
		i+=10;
		System.out.println(i);
		i -=5;
		System.out.println(i);
		
		byte b = 2;
		// 等价于 b = b + 1 , 和 b+=1;
		b++;
		// b = b + 1;
		b+=3333;
		// 虽然 += , ++  和 b= b + xxx 是等价关系.但是 b+xxx 这种运算,需要进行强制类型转换
		// 而 ++ 和 += 这些 会自动强制转换
		b=127;
		b++;
		System.out.println(b);

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值