Day01_入门程序、常量、变量

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环境变量,配好以后就可以了。
配置环境变量如下:

  1. 文件资源管理器 --> 此电脑鼠标右键 --> 选择 属性
    在这里插入图片描述
  2. 选择 “高级系统设置” --> 选择 “环境变量”
    在这里插入图片描述
  3. 点击下方系统变量的 新建 ,创建新的环境变量,变量名输入 JAVA_HOME ,变量值输入JDK9的安装目录 D:\02_DevelopTools\Java\jdk-9.0.1
    在这里插入图片描述
  4. 选中 Path 环境变量, 双击 或者 点击编辑
    在这里插入图片描述
  5. 点击 新建 ,键入 %JAVA_HOME%\bin ,必须是英文格式。选中该行,上移到最上方,点击确定。
    在这里插入图片描述
  6. 新建/修改 CLASSPATH 变量,在环境变量CLASSPATH中添加:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

在这里插入图片描述

  1. 环境变量配置完成,重新开启DOS命令行,在任意目录下输入 javac 命令。
    在这里插入图片描述
5.运行HELLO WORLD

Java程序开发三步骤:编写、编译、运行。
1.编写java程序
在这里插入图片描述
2.编译Java源文件

javac Java源文件名.后缀名

//举例:
javac HelloWorld.java

在这里插入图片描述

扫描二维码关注公众号,回复: 12767572 查看本文章

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_

  • 堆和方法区用来存放东西,而栈的主要用能不是存放信息而是运行方法(通过进栈、出栈你就知道方法就是一个动态运行的地方)。
  • 方法区存放的成员变量名成员方法名,就是存放着名字而已,是个死信息,不动态修改;
  • 堆里面也存放这些成员变量和方法,变量的值跟着栈里面的要求区动态更改。
  • 运行方法的时候如果要修改成员变量那就到堆里面去改,就这样。
    在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45014721/article/details/114834226