Java day01——背景、变量、数据类型、运算符

  • Post author:
  • Post category:java

背景

java

服务器端开发 B/S
Tomcat MySQL
Linux Window MacOS

历史

1993 – Oak
1995 – 面向市场 – 跨平台

组成

JDK – Java Development Kit 开发工具
工具:java、javac、javadoc…
包含JRE
JRE – Java Runtime Environment 运行环境
工具:java
类库:Library + 写好的代码
包含JVM
JVM – Java Virtual Machine 虚拟机
不能独立安装
JDK文件夹组成
bin -> java的开发工具 java\javac\javadoc\jar…
conf -> 配置文件
lib -> jar包(字节码文件打包而成)

终端调试

  1. 先在所在目录查找命令
  2. 去环境变量指定目录中寻找
  • javac helloWorld.java->生成.class字节码文件
  • java helloWorld->执行
    在这里插入图片描述

环境变量

解决方案:
1.进入到工具所在目录 – 治标不治本 – 不推荐
cd -> 切换目录
d: -> 切换盘符
javac -> 编译工具
2.修改环境变量
我的电脑 -> 右键 -> 属性 -> 高级 -> 环境变量
path %JAVA_HOME%\bin
新建变量:JAVA_HOME
值:jdk安装目录 jdk9.0.4

变量

定义

jvm内存中分配了一块空间,存储数据

命名规则

1.只能出现:英文 + 数字 + _ + $
2.不能以数字开头
3.变量名:可读性好、首字母小写、第二个单词开始首字母大写

public和class

public: 修饰词 – 修饰的是class
class: 类 – 文件

  • 一个文件中可以有多个类,但最多只能有一个public修饰的类
  • public修饰的这个类,名字必须和文件名相同

数据类型

只有2种数据类型:基本数据类型 + 引用类型
引用类型:数组、类、接口

基本数据类型

8种
整型:byte、short、int、long
浮点型:float、double
字符型:char
布尔:boolean
基本单位:1 字节 = 8位

char字符型

char c = 'a';
c = '中';
c = '\u4e2d'; // Unicode编码 - 1个字符=2个字节 防止乱码
System.out.println(c);
char c1 = 48; // ASCII码 'A'=65 'a'=97 '0'=48
System.out.println(c1);
c1 = 0; // 空白字符
System.out.println(c1);		
System.out.println("\u4e2d\u4e2d\u4e2d\u4e2d");
0
 
中中中中

float、double浮点型

double不能用==,精度缺失

double d = 5.0 - 4.9;
// 结果d=0.09999999999999964
d = 3.0 - 2.9;
// d=0.10000000000000009
d = 3.0 - 2.5;
//d=0.5

补码

java虚拟机中存储基本数据类型的格式:二进制补码
2 4 8 16 32 64 128 256 512 1024
20
0 001 0100
-20
原码:1 001 0100
反码:1 110 1011
补码:1 110 1100 – JVM

取值范围

byte:1个字节 = 8位 范围:-128~127
0 111 1111 -> 127
补:1 111 1111
反:1 111 1110
原:1 000 0001 -> -1
1 111 1110
1 111 1101
1 000 0010 -> -2
最小值:
1 000 0000
1 111 1111
1 1 000 0000 -> -128
short:2个字节 = 16位 范围:-2^15 ~ 2^15-1
int: 4个字节 = 32位 范围:-2^31 ~ 2^31-1
long: 8个字节 = 64位 范围:-2^63 ~ 2^63-1
(通常用来表示时间)
char: 2个字节 = 16位
1111 1111 1111 1111 -> 0 ~ 2^16-1 = 65535
‘\u0000’ ~ ‘\uffff’
科学计数法:
float:32位
1位符号位 8位 指数位 23位 尾数位
double:64位
1位符号位 11位 指数位 52位 尾数位
客观存在:精度缺失问题, 不能判断两个浮点数是否相等
boolean: true false 1个字节8位

直接量、字面量

int i = 2100000000;
// 整数的直接量、字面量默认类型都是int
long l = 21000000000l;
// 想要表示long类型,需要追加 l/L
float f = 3.14; // 编译错误
// 小数字面量默认都是double类型
// 如果要给float赋值,需要追加 f/F
float f = 3.14f;

自动类型转换

byte -> short -> char->int-> long -> float
只能小范围转换到大范围

byte b = 10;
short s = 128;
s = b; // 小范围赋值给大范围,允许 - 自动类型转换
b = (byte)s; // 大范围赋值给小范围,不允许,除非强制类型转换

运算符

算术运算符

加、减、乘、/、%(取模)、++、–
++ i 先运算,再使用
i ++ 先使用,再运算

运算符左右两边类型是统一的

		double a = 1 + 3.14;//int+double=double
		System.out.println(a);//a=4.140000000000001
			
		int i = 5 / 2; // 整除
		System.out.println(i); // 2
		double h = 5 / 2;
		System.out.println(h);//2.0
		double d = 5 / 2.0;
		System.out.println(d); // 2.5
		System.out.println(i++); // 2
		System.out.println(i); // 3

赋值运算符

= += -= *= /=
a += 2; 不同于 a = a+2

byte b = 10;
b = b + 1; // 编译错误,byte=int
b++;// 不会改变类型
b += 1; // 不会改变类型

比较运算符

> < >= <= == !=
结果:boolean类型

位运算符 与& 或 | 异或^

与& 或 | 异或^
二进制计算 2 ^ 4
0000 0010
0000 0100
0000 0110 = 6
抑或:相同是0,不同是1

int a = 2 & 4;
System.out.println(a);//0
System.out.println(2 ^ 4);//6

逻辑运算符&& & || |

两边都是boolean值,结果也是boolean值

  • &&: 两边都是true,结果才是true
    ||: 有一个是true,结果就是true
  • && 比 & 多了一个“短路
    短路:通过第一个表达式已经能确定整个结果,第二个表达式就跳过了
int a = 10;
int b = 20;
System.out.println(a++ > 10 && b-- < 20); // false
System.out.println(a); // 11
System.out.println(b); // &:19  &&:20
//&就算第一个表达式不成立还继续执行了第二个表达式,而&&直接跳过了

位移运算符:>> << >>>

>>>:无符号右移,先转换成补码,永远补0
>>:补位是符号位

int a = -4;
System.out.println(a >> 1); // -2
System.out.println(a << 1); // -8
System.out.println(a >>> 1); // 2147483646

在这里插入图片描述

三目运算符:?:

表达式1[boolean值] ? 值1 : 值2
可以用来做判断

int a = 18;
double d = a <= 20 ? 3.14 : 0;
System.out.println(d);//true取值1,false取值2

版权声明:本文为qq_40905010原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。