Java基础(一)

java

编写java程序流程

  • 建立文本文档,将扩展名编写为xxx.java;
  • 使用记事本/Notepad++的方式打开文件,编写java代码进行保存;
  • 启动dos窗口,并切换到.java文件所在的路径中【也可以打开.java文件所在的文件夹位置,在文件夹栏直接输入cmd即可】;
  • 输入javac xxx.java 进行编译,生成xxx.class的字节码文件;
  • 使用Java xxx进行解释执行,并打印结果

Java跨平台原理

  • java字节码可以通过JVM翻译为具体平台能够执行的机器命令。由于sun定义了JVM规范,且不同佛如操作系统大多提供了JVM实现,使得相同的一个字节码文件可以在不同佛如系统上运行,让Java拥有了“一次编译,到处使用”的美名。

数据类型:

  • 基本数据类型:byte、short、int、long、float、double、boolean、char

  • 引用数据类型:数组、类、接口、枚举、标注

进制转换

  • 十进制转二进制

    ①除2取余法:将十进制整数不断额除以2取出余数,余数逆序排序。

    ​ 例: 45转二进制 结果为:101101

    ​ 2|___45 1

    ​ 2|___22 0

    ​ 2|___11 1

    ​ 2|____5 1 ↑

    ​ 2|____2 0 |

    ​ 2|____1 1 ↑

    ​ 0

    ②拆分法:将十进制整数拆分为若干个二进制权重的和,有权重位的写1,否则为0。

​ 45 = >> 32 + 8 +4 +1 == >> 2⁵ + 2³ + 2² + 2⁰ == >> 1 0 1 1 0 1

  • 负十进制转换为二进制的方式

    先将十进制的绝对值转换为二进制,再进行按位取反再加1

    负数需要补码:按位取反,再加1

    ​ 按位取反:1101 0010 -45 :1101 0011

    ​ 再加1 : 1101 0011 45: 0010 1101


    • 非负数所能表示的整数范围:0000 0000 ~0111 1111 => 0~127 =>0 ~2⁷-1
    • 负数所能表示的整数范围: 1000 0000 ~ 1111 1111 => 1000 0000 =>-128 ~ -1

​ 1000 0000:
【减一:0111 1111】

​ 【按位取反:1000 0000】

​ 【十进制表示:128】

​ 【加上负号:-128】

​ 1111 1111:
【减一:1111 1110】

​ 【按位取反:0000 0001】

​ 【十进制表示:1】

​ 【加上负号:-1】

  • 单个字节表示的整数范围是:-128 ~ 127 => -2⁷ ~ 2⁷-1

基本数据类型之间的转换

  • 从小类型可以自动转换为大类型

  • 强制类型转换,从大类型转小类型:目标类型 变量名 = (目标类型)源类型变量名;【强制转换是有风险的】

    ​ 如:byte + int 相加 结果是int型,强行byte = int ,int 转 byte 可能会有损失,这时就可以使用强制类型转换,将int 类型转换为byte

    ​ byte + byte 相加 结果还是int类型,这是编译器的优化结果

  • 笔试考点:byte b1 =10;

    ​ b1 += 2;//等价于b1 = (byte)(b1 + 2)

移位运算符

左移运算符:<< ,将数据的二进制位向左移动,右边用0补充

右移运算符: >>,将数据的二进制位向右移动,左边使用符号位补充1、0

逻辑右移运算符(无符号右移):>>>,将数据的二进制位向右移动,左边用0补充

运算符

​ 算数运算符、字符串连接符、关系运算符、自增减运算符、逻辑运算符、条件运算符( ?: )、赋值运算符、移位运算、位运算符

​ 运算符的优先级:()优先级最高, = 优先级极低

Java的分支结构

if分支结构、if else分支结构、if else if else分支结构、switch case分支结构

Java的循环结构

for循环、while循环、do while循环、双重for循环

数组

一维数组:

​ 数组名:记录一维数组在内存空间中的地址信息,便于下次访问

​ 数组元素:指存放在数组中的数据内容

​ 数组长度:指数组中最多可以存放的元素个数,通常可以使用 数组名.length获取

​ 数组下标:指数组元素在数组中的编号,从0开始到长度-1

  • 基本类型的数组创建后,其元素的初始值:byte、short、char、int、long为0;float和double为0.0;boolean为false。

​ 语法格式: 如:① 动态方式: 声明数组,但没有初始化数组:

​ int[ ] arr = new int[长度]

​ ② 静态方式: 数组声明的同时,对数组元素进行初始化:

​ 数据类型[ ] 数组名称 = {初始值1,初始值2,.......}

二维数组

  • 二维数组本质上就是由多个一维数组叠起来的数组,二维数组中每个元素都是一维数组,而一维数组中的每个元素才是数据内容。

  • 声明: 数据类型[ ] [ ] 数组名称 = new 数据类型 [行数] [列数];

    ​ 如:int[ ] [ ] arr = new int [长度] [ ];

    ​ arr.length代表二维数组arr的长度,就是元素个数(二维数组中每个元素都是一维数组),就是行数;

    ​ arr[0].length代表二维数组中第一个元素的长度,即一维数组的长度,就是第一行的列数。

声明一个数组,就是在堆区开辟(new)一块空间,用来存储数组中的元素,再将其地址存储在栈区的变量中。

内存结构之堆区:JVM会在其内存空间中开辟一个称为“堆”的存储空间,这部分空间用于存储使用了new 关键字创建的数组和对象。

内存结构之栈区:用于存放程序运行过程当中所有的局部变量,一个运行的java程序从开始到结束会有多次变量的声明。

数组的优缺点

  • 可以直接通过下标(或索引)的方式访问指定位置的元素,速度快。
  • 同一数组要求所有元素的类型相同
  • 数组要求内存空间连续,并且长度一旦确定就不能修改
  • 增加和删除元素时,移动元素量太大,效率低

数组的复制

int[] arr = {11,22,33,44,55,22};
int[] brr = new int[3];
brr = arr;

表示数组名arr的内存空间中存放的是数据在堆区中的内存地址信息,

赋值后让brr变量中存放了arr所指向堆区的内存地址,也就是让brr和arr指向了同一块堆区空间

本质上就是改变指向而已

java的数组工具类

posted @ 2020-11-20 11:10  小白可别不举铁  阅读(102)  评论(0编辑  收藏  举报