标签:-- java代码 科学计数法 生成 解释 stat 做什么 代码 public
问题: 为什么在编程之前都需要进行环境搭建,到底在做什么事情?
编程语言(自然语言)-----编译 ----> 机器指令
搭建环境,最重要的事之一就是安装编译器
问题:java跨平台,什么是跨平台,为什么能跨平台?
平台:操作系统 或 CPU 架构
跨平台:一次编译后的生成的目标文件,可以在各个平台直接运行。不需要重复的编译
例如:C语言
print:
? 各个平台的机器指令不同
? --编译1 ----> 101010101(机器码)
? --编译2------> 10101000(机器码)
Java 生成的目标文件.class 字节码文件,不在操作系统上直接运行,而是在java虚拟机(JVM)上运行。这就隔离了各个操作系统的指令集的不同。
.class ------Window JVM-----> Window机器码
.class ------ Linux JVM -----> Linux 机器码
.class ------ Mac JVM -----> Mac 机器码
前提:要在各个平台上安装不同版本的虚拟机JVM
问题:JDK、JRE、JVM分别是什么,有什么包含关系?
JDK 包含JRE,JRE包含JVM
JVM:java虚拟机,作用就是执行.class文件,java代码的真正执行者,负责将.class 翻译为该平台的指令,然后执行。
JRE:java运行环境,核心Java虚拟机,还有一些解释器等等,通过JRE,我们能真正运行Java项目,(只能运行,不能编译),包含jvm,解释器等,总体负责java代码的运行。
JDK:JDK不单可以运行,还可以进行编译。编译器在JDK中装着。Java开发工具包,包含编译器、jre、核心类库等,总体负责编译+执行java代码。
不能单独装JVM,能单独装JRE,JDK
综上,搭建Java开发环境,其实就是安装jdk软件,既可以编译java程序,也可以执行java程序。
变量
数据类型
运算符
流程控制
数组
函数
字符串
变量的作用域:
包含它的最近的一对大括号。
全局变量:
变量的作用域是整个类。(其实就是类的属性)
局部变量:
? 除了全局变量,就是局部变量(在方法中、代码块中定义的变量)
变量的初始化:
变量要先赋值(初始化),再使用,只有初始化后才会分配对应的内存空间。
String s = null;//注意这一点,不要忘了给初值
if(a>0){
s = "ncdj";
}
System.out.println(s);
变量的命名规则
由数字、字母、下划线、$、以及各国的语言文字组成,不能以数字开头,不能包含关键字。“驼峰原则"
基础数据类型:byte1 short2 char2 int4 long8 float4 double 8 boolean1
引用数据类型:类
计算机是 0 和 1 的世界,为什么能存储字符呢?
字符 -- (编码)----数字
每种编码,都有一张码表,表示字符与数字的对应关系。
char c = ‘你‘ ,参照那个码表?
参照 Unicode表
如何验证到底参照那个码表?
public class A1 {
public static void main(String[] args) {
char c = ‘你‘;
System.out.println((int)c);
//20320
//GDK中 ‘你’对应的是 C4e3
//Unicode 中‘你’ 对应的是 4F60
//是16进制,10进制为
System.out.println("gdk:"+ 0xc4e3);
System.out.println("Unicode:"+ 0x4F60);
// gdk:50403
// Unicode:20320
//三种写法
char c2 = ‘你‘;
char c3 = 0x20320;
char c4 = ‘\u20320‘ //直接写Unicode编码
}
}
所以,char a = ‘字符‘,参照码表将字符转换为数字,然后存储。
char a = 20320; //是否可以? char 2 个字节
当然可以,但麻烦
其实,字符在内存中也是数字,只不过是一种数字的特殊表示形式。
char a = 50403; 是否可以?
不可以,超出数字表示范围,报错。
char 参照 unicode 表转换,unicode 目前收录了14万个字符,char 只占两个字节,只能表示其中的一部分。超过两个字节,char 无法表示。
**int long **
int 所能表示的最大数字:用到 了封装类。
public class A2 {
public static void main(String[] args) {
//打印int能表示最大数字: 2^31 -1
System.out.println(Integer.MAX_VALUE);
}
}
2147483647
long a = 2147483648L;//错误 ,必须要加L
在编译时,出现数字,默认是用四个字节去存储的。
加L的作用:使得编译时,拿更大的空间去存储数字,而不是默认的四个字节去存储。
float,以科学计数法在内存模型中表示,不再是补码。
long 占8个字节,float 占4个字节,请问那个能表示的数字大?
float 大,并且float类型比 long 是高等级。
验证:
System.out.println(Float.MAX_VALUE > Long.MAX_VALUE);
true
自动转换、强制转换
A a,变量a是A类型;
B b ,变量b是B类型;
请问在那些情况下,可以进行a = b 这样的赋值?
只有如下3种情况:
byte1 short2 char2 int4 long8 float4 double 8
低 高
低等级可以自动转换为高等级
高等级需要强制转换为低等级
为什么?低转高,自动转换,高转低,强转
因为低转高,没有安全隐患,一定能转。高转低 ,存在安全隐患(精度损失,范围),所以需要程序员显示的声明强制(后果自负)
所以:
int a =‘我‘;//正确
自动转换也会发生在运算时:
char a = ‘我‘
a = a +1;
1 是int ,int + char = int ,int 类型赋值给char 出错
//正确写法:
a = (char)(a+1);
迷惑性:
char a = ‘我‘ +1; //正确,编译时期就计算出了‘我’+1的具体值,不会等到自动转换环境。‘我’就相当于一个数字
//类似于
int i =10;
byte d = i+1;//错误
byte d = 10 +1;//正确
char b=‘你‘;
b+=1;//正确,记住;
标签:-- java代码 科学计数法 生成 解释 stat 做什么 代码 public
原文地址:https://www.cnblogs.com/moshanghuai/p/13549782.html