文章目录
1.计算机基础知识
二进制
- 十进制转二进制
- 二进制转十进制
字节
电脑中最低存储单元是字节,(bit比字节还要小,1字节=8bit)
JVM、JRE和JDK
- JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的
运行环境。我们编写的Java代码,都运行在 JVM 之上。 - JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 。
- JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具。
2.如何在cmd上运行java程序
1.下载jdk
2.解压
3.配置JAVA_HOME环境变量
这说明你没有配置java环境变量,配好以后就可以了。
配置环境变量如下:
- 文件资源管理器 --> 此电脑鼠标右键 --> 选择 属性
- 选择 “高级系统设置” --> 选择 “环境变量”
- 点击下方系统变量的 新建 ,创建新的环境变量,变量名输入 JAVA_HOME ,变量值输入JDK9的安装目录 D:\02_DevelopTools\Java\jdk-9.0.1
- 选中 Path 环境变量, 双击 或者 点击编辑
- 点击 新建 ,键入 %JAVA_HOME%\bin ,必须是英文格式。选中该行,上移到最上方,点击确定。
- 新建/修改 CLASSPATH 变量,在环境变量CLASSPATH中添加:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
- 环境变量配置完成,重新开启DOS命令行,在任意目录下输入 javac 命令。
5.运行HELLO WORLD
Java程序开发三步骤:编写、编译、运行。
1.编写java程序
2.编译Java源文件
javac Java源文件名.后缀名
//举例:
javac HelloWorld.java
3.运行java程序
java 类名字
//例如:
java HelloWorld
4.关于编译和运行
- 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件。
- 运行:是指将 class文件 交给JVM去运行,此时JVM就会去执行我们编写的程序了。
3.常量和变量
1.常量
也就是在java中单引号和双引号是不一样的
剩下的常量有:整数型常量、小数常量、布尔常量
2.变量
//定义字节型变量
byte b = 100;
//定义短整型变量
short s = 1000;
//定义整型变量
int i = 123456;
//定义长整型变量
long l = 12345678900L;
//定义单精度浮点型变量
float f = 5.5F;
//定义双精度浮点型变量
double d = 8.5;
//定义布尔型变量
boolean bool = false;
//定义字符型变量
char c = 'A';
3.数据类型
Java中的默认类型:整数类型是 int 、浮点类型是 double
4.数据类型的转换
1.自动转换
int i = 1;
byte b = 2;
//int类型和byte类型运算,结果是int类型 ;如果你写成“byte x = b + i”那就会报错
int j = b + i;
int i = 1;
double d = 2.5;
//int类型和double类型运算,结果是double类型 //int类型会提升为double类型
double e = d+i;
2.自动转换的转换规则
范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
// 左边是long类型,右边是默认的int类型,左右不一样。一个等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储。int --> long,符合了数据范围从小到大的要求。这一行代码发生了自动类型转换。
long num1 = 100;
// 左边是double类型,右边是float类型,左右不一样。 float --> double,符合从小到大的规则,也发生了自动类型转换
double num2 = 2.5F;
System.out.println(num2); // 2.5
// 左边是float类型,右边是long类型,左右不一样。 long --> float,范围是float更大一些,符合从小到大的规则。 也发生了自动类型转换
float num3 = 30L;
System.out.println(num3); // 30.0
3.强制转换
强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。强制转换需要我们自己手动执行。
数据类型 变量名 = (数据类型)被转数据值;
// double类型数据强制转成int类型,直接去掉小数点。
int i = (int)1.5;
//short类型变量
short s = 1;
/*出现编译失败 s和1做运算的时候,1是int类型,s会被提升为int类型 s+1后的结果是int类型,将结果在赋值会short类型时发生错误(short内存2个字节,int类型4个字节 必须将int强制转成short才能完成赋值) */
s = s + 1;//编译失败
s = (short)(s+1);//编译成功
强烈注意:
- 浮点转成整数,直接取消小数点,可能造成数据损失精度。
- int 强制转成 short 砍掉2个字节,可能造成数据丢失。
注意事项: - 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
- byte/short/char这三种类型都可以发生数学运算,例如加法“+”. byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
// 左边是int类型,右边是long类型,不一样。long --> int,不是从小到大,不能发生自动类型转换!
//格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
int num = (int) 100L;
// long强制转换成为int类型
int num2 = (int) 6000000000L;
System.out.println(num2); // 1705032704
// double --> int,强制类型转换
int num3 = (int) 3.99;
System.out.println(num3); // 3,这并不是四舍五入,所有的小数位都会被舍弃掉
char zifu1 = 'A'; // 这是一个字符型变量,里面是大写字母A
System.out.println(zifu1 + 1); // 66
byte num4 = 40; // 注意!右侧的数值大小不能超过左侧的类型范围
byte num5 = 50;
// byte + byte --> int + int --> int
int result1 = num4 + num5;
System.out.println(result1); // 90
short num6 = 60;
// byte + short --> int + int --> int
// int强制转换为short:注意必须保证逻辑上真实大小本来就没有超过short范围,否则会发生数据溢出
short result2 = (short) (num4 + num6);
System.out.println(result2); // 100
4.ASCII编码
极其常用的编码
char zifu1 = '1';
System.out.println(zifu1 + 0); // 49
char zifu2 = 'A'; // 65
char zifu3 = 'c';
// 左侧是int类型,右边是char类型,char --> int,确实是从小到大,发生了自动类型转换
int num = zifu3;
System.out.println(num); // 99
5.加减乘除那些事
①一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
// int + double --> double + double --> double
double result3 = x + 2.5;
System.out.println(result3); // 12.5
②任何数据类型和字符串String进行连接的时候,结果都会变成字符串
System.out.println("Hello" + "World"); // HelloWorld
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 20); // Java20
System.out.println(str2 + 20 + 30); // Java2030
3.除法整数除以整数,结果仍然是整数。只看商,不看余数。
int x = 10;
int y = 3;
int result1 = x / y;
System.out.println(result1); // 3
int result2 = x % y;
System.out.println(result2); // 余数,模,1
4.关于自增和自减
/*
自增运算符:++
自减运算符:--
1. 在单独使用的时候,前++和后++没有任何区别。也就是:++num;和num++;是完全一样的。
2. 在混合的时候,有【重大区别】
A. 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。 【先加后用】
B. 如果是【后++】,那么首先使用变量本来的数值,【然后再让变量+1】。 【先用后加】
注意事项:
只有变量才能使用自增、自减运算符。常量不可发生改变,所以不能用。
*/
int num1 = 10;
System.out.println(num1); // 10
++num1; // 单独使用,前++
System.out.println(num1); // 11
num1++; // 单独使用,后++
System.out.println(num1); // 12
// 与打印操作混合的时候
int num2 = 20;
// 混合使用,先++,变量立刻马上变成21,然后打印结果21
System.out.println(++num2); // 21
System.out.println(num2); // 21
System.out.println("=================");
int num3 = 30;
// 混合使用,后++,首先使用变量本来的30,然后再让变量+1得到31
System.out.println(num3++); // 30
System.out.println(num3); // 31
System.out.println("=================");
int num4 = 40;
// 和赋值操作混合
int result1 = --num4; // 混合使用,前--,变量立刻马上-1变成39,然后将结果39交给result1变量
System.out.println(result1); // 39
System.out.println(num4); // 39
System.out.println("=================");
int num5 = 50;
// 混合使用,后--,首先把本来的数字50交给result2,然后我自己再-1变成49
int result2 = num5--;
System.out.println(result2); // 50
System.out.println(num5); // 49
System.out.println("=================");
int x = 10;
int y = 20;
// 11 + 20 = 31
int result3 = ++x + y--;
System.out.println(result3); // 31
System.out.println(x); // 11
System.out.println(y); // 19
// 30++; // 错误写法!常量不可以使用++或者--
5.复合赋值运算符:
+= a += 3 相当于 a = a + 3
-= b -= 4 相当于 b = b - 4
*= c *= 5 相当于 c = c * 5
/= d /= 6 相当于 d = d / 6
%= e %= 7 相当于 e = e % 7
int a = 10;
// 按照公式进行翻译:a = a + 5
// a = 10 + 5;
// a = 15;
// a本来是10,现在重新赋值得到15
a += 5;
System.out.println(a); // 15
int x = 10;
// x = x % 3;
// x = 10 % 3;
// x = 1;
// x本来是10,现在重新赋值得到1
x %= 3;
System.out.println(x); // 1
byte num = 30;
// num = num + 5;
// num = byte + int
// num = int + int
// num = int
// num = (byte) int
num += 5;
System.out.println(num); // 35
6.jshell的使用
7.输入输出
print()方法:实现不换行的数据输出
println()方法:实现换行的数据输出
printf()方法:
%d代表十进制,%f代表浮点数,%n换行符,%s代表字符串,%c是单个字符,%%输出百分号
System.out.printf("圆的面积=%.3f",area);
8.Java内存的划分(堆、栈、方法区)
本节内容在黑马javaSE的day05_07到day05_11
上面那幅图也可以这样理解:
- 堆和方法区用来存放东西,而栈的主要用能不是存放信息而是运行方法(通过进栈、出栈你就知道方法就是一个动态运行的地方)。
- 方法区存放的成员变量名和成员方法名,就是存放着名字而已,是个死信息,不动态修改;
- 堆里面也存放这些成员变量和方法,变量的值跟着栈里面的要求区动态更改。
- 运行方法的时候如果要修改成员变量那就到堆里面去改,就这样。
本节内容在day06_07到day06_
- 堆和方法区用来存放东西,而栈的主要用能不是存放信息而是运行方法(通过进栈、出栈你就知道方法就是一个动态运行的地方)。
- 方法区存放的成员变量名和成员方法名,就是存放着名字而已,是个死信息,不动态修改;
- 堆里面也存放这些成员变量和方法,变量的值跟着栈里面的要求区动态更改。
- 运行方法的时候如果要修改成员变量那就到堆里面去改,就这样。
欢迎纠错和指导,感谢浏览和收藏