Java基础语法总结

2019-08-26 06:20:35来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Java基础语法总结

Content

  • 1.win10安装JDK8
  • 2.数据类型与变量
  • 3.运算符
  • 4.程序流程控制
  • 5.数组


1.win10安装JDK8

  • jdk8下载地址:

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1566377575425

【下载的这个安装包主要包含JDK,JRE,JavaFx包】

  • 设置jdk安装路径

1566377795519

  • 设置jre安装路径

1566377917840

  • 设置环境变量

    • 找到jdk安装的bin目录,复制路径

    1566378270545

    • 右键电脑选择属性

      1566378337808

1566378371054

1566378391369

? 添加刚刚复制的路径到path里:

1566378458360

? 点击三个确定。

  • 查看是否安装成功

    java -version
    java
    javac

1566378602672

1566378623676

Question1:JDK与JRE的区别?

JDK:Java Development Kit Java开发工具包

JRE:Java Runtiome Environment Java运行环境


JDK与JRE的关系:以Java代码运行为例,编写好Java代码之后,通过javac将java源文件编译成class字节码文件,然后通过java命令,运行字节码文件。那么运行字节码的环境就是JRE。(JRE的核心就是JVM)

Question2:什么是JVM?Java如何实现平台无关性

JVM:Java Virtual Machine Java虚拟机

JVM的主要作用就是将class字节码文件翻译成机器码(01)供给计算机执行。


跨平台——Java程序可以在多种平台上运行。


平台指的是操作系统,目前主流的操作系统:Windows,Mac,Linux。

以日常软件为例,同一个软件的win版和mac版是分开的。但是功能却是基本相同的。

JVM同样如此,也有win版,mac版以及linux版。安装在不同的平台上的JVM虽然有所差异,但都能完成同样一件使命——将class文件翻译成机器码。


概括来说,JVM有两个功能:其一是兼容不同的操作系统,其二是翻译class字节码文件。

Question3:为什么要设置环境变量?

在解决这个问题之前,先解决什么是环境变量:

1566380580721

运行一个程序(命令),系统从当前目录寻找,或者从环境变量中寻找。换句话说,如果在java,javac的目录下执行这个两个命令,是没有问题的。但是如果更换了目录,系统在当前目录找不到,就会去环境变量中寻找。所以设置环境变量的根本目的是在电脑的任何一个文件夹下都可以编译运行Java程序。


2.数据类型与变量

变量和数据类型难舍难分,思考了好久,得出下面这个结论:


变量是内存中的一个存储区域。而数据类型的定义决定了这块存储区域的大小。【变量与数据类型的关系】


为什么需要定义变量存储区域的大小?


以结果为导向来分析:

Java的整数类型分为4种:byte,short,int,long。

四种的区别在于占用的存储空间不一样。

byte占用1个字节,short占用2个字节,int占用4个字节,而long占用8个字节。


什么是字节?

字节是一种存储单位的度量。1个字节等于8位。

什么是位呢?

位可以理解为计算机的最小单位:0或者是1。也就是是说1个字节是8个0和1的排列组合:

比如说:00000000,00000001,00000011,......11111111。


那么在这种情况下1个字节可以表示多大的数呢?

00000000转换为十进制依然是0,11111111转换为十进制是255。

转换工具:https://tool.lu/hexconvert/

也就是说,一个字节最大可以表示255而最小1可以表示0。


这是无符号位的情况,如果8位表示正数和负数,那么8位可以表示的范围是多大呢?

通常情况下,用第一位来表示正负【0为正,1为负】,这样算下来8位可以表示的范围是-127到+127。

历史长河中,补码登场

上述引入符号位的8位二进制数可以理解为原码。对于正数来说,原码就是补码,而对于负数来说,保留符号位,其他原码按位取反加1所得即为补码。补码的出现使得加减法只有加法,简化了计算结构,提高运算速度。


那么8位的情况下,用补码来衡量,可以表达的范围是-128--127。

为什么是-128???(按照补码计算)

10000001到11111111表示的范围是1到127,01111110到00000001表示的范围是-1到-127。

而00000000属于负数,按位取反加1的结果是10000000表示的数值是-128,但是00000000是负数。

所以8位二进制数在计算机里存储的范围是-128--127。


回到刚刚字节的问题,1字节等于8位而八位可以表示-128--127。这是byte类型的表示范围。


那如果我想用计算机计算1000加上1000,byte明显是不可用的。因为byte表示不了1000这个数值。

而short类型的存储空间为2个字节,也就是16位。对于short数据类型来说,能表示多大的数呢?

根据8位的表示范围推算:- 2的15次方到2的15次方-1=={-32768--32767}


以此类推,int为4个字节,long为8个字节,能表示的数更大。


Java通过定义变量的类型来规定变量的内存空间大小,通过阶梯式的定义,既有满足小数值运行的byte类型,也有支持大数值运算的long类型。这样不仅满足运算的最大支持(long),同时也能节省系统内存资源(byte)。



总结:数据类型的区分是一种系统资源分配优化的方案。


什么是变量?

  • 变量是内存中的一个存储区域。【程序运行的时候,变量是放在内存条里的】
  • 存储区域的数据可以在同一类型范围里不断变化【所以叫变量,就是能变嘛】【同一类型暂时先忽略】
  • 变量包括:【int x = 3】== 变量类型int 变量名x = 变量的值3

变量必须先声明后使用

int x = 10; (Yes)

x = 10; (No)

简单来说,变量必须得先指定类型才能使用。


那么,变量有哪些类型呢???

数据类型

数据类型分为基本数据类型和引用数据类型。

基本数据类型:整数型与浮点型,字符型,布尔类型

引用数据类型:字符串

  • 整数型与浮点型

1566389405126

  • 字符型char 2字节

Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。

char c1 = 'a';

char c2 = '中';

char c3 = '9';


char c3 = ‘\n’; 换行符

  • 布尔类型Boolean

    • boolean类型数据只允许取值true和false,无null。

    • 不可以使用0或非 0 的整数替代false和true。(C语言可以)


自动类型转换:由表示范围小的自动转换为表示范围大的。

为什么long 8字节自动转换为float 4字节的?

1566390656654

1566390663417

指数爆炸.....

顺便看看float和double的精度:7位和16位。


  • 字符串String(引用数据类型)

    存放多个字符;String word = “hello,world”;

强制类型转换

反向自动转换。

short to byte:

1566391812245

字符串转为基本类型:(通过包装类转换)

1566391956025

什么是包装类???

包装类是Java设计之初提出的,主要解决基本数据类型无法面对对象编程的问题。

1566392080950

基本数据类型是存放在栈中的,只有数据。而引用类型的值存放在栈中,而引用对象存放在堆中。

3.运算符

算术运算符

1566393822494

赋值运算符=

比较运算符

1566393898316

逻辑运算符

1566393988004

&和|两边都会进行运算

&&左边为false时右边不进行运算,直接返回false

||左边为true时右边不进行运算,直接返回true


^异或,相同为false,不同为true

位运算符

1566394178767

1566394216617

3<<2: 3 == 00000011 ,左边去掉两位,右边添加2位,变为00001100

3>>1: 右边去掉一位,左边加1位

三元运算符

条件表达式?表达式1:表达式2

条件表达式为true,执行表达式1;为false,执行表达式2

运算符的优先级

1566394796243

4.程序流程控制

顺序结构

分支结构(if&& switch)

1566394931361

1566394953114

循环结构

  • for
  • while
  • do while

1566395012840

1566395029607

1566395042832

5.数组

  • 引用数据类型
  • 内存空间连续

一维数组

//动态初始化
  int a[] = new int[3];
  a[0]=1;
  a[1]=2;
  a[2]=3;


//静态初始化
 int b[] = new int[]{1,2,3};


  //输出数组长度
System.out.println(b.length);

数组元素的默认初始化值

1566395599393

二维数组

 int[][] arr = new int[3][4];
for(int i =0;i<3;i++)
{
    for(int j=0;j<4;j++)
    {
        arr[i][j]=i+j;
    }
}

 for(int i =0;i<3;i++)
 {
     for(int j=0;j<4;j++)
     {
         System.out.print(arr[i][j]+"\t");
         if(j==3)
         {
             System.out.println();
         }
     }
 }

1566395969387

Arrays工具类的使用

1566396078338

参考资料:

康师傅2019新版—30天搞定Java核心技术(一)https://www.bilibili.com/video/av47470288

JavaGuide【52k】:https://github.com/Snailclimb/JavaGuide

Java中long类型为何会自动转换为float类型https://blog.csdn.net/writing_happy/article/details/78880606

包装类:https://www.cnblogs.com/javastack/p/9644520.html


原文链接:https://www.cnblogs.com/noneplus/p/11391668.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何使用SpringBoot封装自己的Starter

下一篇:【Spring Boot】利用 Spring Boot Admin 进行项目监控管理