JavaSE之路-01

2021-04-01 00:27

阅读:363

标签:--   java代码   科学计数法   生成   解释   stat   做什么   代码   public   

JavaSE之路-01

1、环境搭建

问题: 为什么在编程之前都需要进行环境搭建,到底在做什么事情?

编程语言(自然语言)-----编译 ----> 机器指令

搭建环境,最重要的事之一就是安装编译器

2、跨平台

问题: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

3、JDK、JRE、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程序。

基础语法

  • 变量

  • 数据类型

  • 运算符

  • 流程控制

  • 数组

  • 函数

  • 字符串

1)变量

变量的作用域:

包含它的最近的一对大括号。

全局变量:

变量的作用域是整个类。(其实就是类的属性)

局部变量:

? 除了全局变量,就是局部变量(在方法中、代码块中定义的变量)

变量的初始化:

变量要先赋值(初始化),再使用,只有初始化后才会分配对应的内存空间。

String s = null;//注意这一点,不要忘了给初值
if(a>0){
    s = "ncdj";
}
System.out.println(s);

变量的命名规则

由数字、字母、下划线、$、以及各国的语言文字组成,不能以数字开头,不能包含关键字。“驼峰原则"

2)数据类型

基础数据类型: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种情况:

  • A,B 是基础数据类型的数字,例如 int , long ,float
  • A,B是子父类或子父接口的关系
  • A和B是基础数据类型和它们的包装类的关系,例如 int 和 Integer

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;//正确,记住; 

JavaSE之路-01

标签:--   java代码   科学计数法   生成   解释   stat   做什么   代码   public   

原文地址:https://www.cnblogs.com/moshanghuai/p/13549782.html


评论


亲,登录后才可以留言!