编写java程序的流程
  ①新建文本文档,将文件扩展名由xxx.txt修改为xxx.java;
  使用记事本/Notepda++的方式打开文件,编写java代码后进行保存;
  ③启动Dos窗口,并切换到.java文件所在的路径中;
  ④使用javac xxx.java进行编译,生成xxx.class的字节码文件;
  ⑤使用java xxx 进行解释执行,打印最终结果;

常见的错误
  错误:需要class,interface或enum => 通常都是class关键字拼写错误
  错误:找不到符号 => 通常因为单词拼写错误或java中不支持这样的单词(或不存在)
  错误:需要’;’ => 通常都是因为少写分号,加上英文版分号即可
  错误:非法字符:’\uff1b’ => 通常是因为出现了中文标点符号,修改为英文版即可
【当程序报错时先根据提示信息解决第一个错误,再解决下一个错误】

java11新特性之简化的编译运行
  ①新建文本文档,将文件扩展名由xxx.txt修改为xxx.java;
  ②使用记事本/Notepda++的方式打开文件,编写java代码后进行保存;
  ③启动Dos窗口,并切换到.java文件所在的路径中;
  ④使用java xxx.java进行编译运行,打印最终结果(慎用);

注释
  // 单行注释,从//开始到本行结束,都是注释。
  /* / 多行注释,从/开始,到/结束,中间都是注释
  /
* */ 多行/文本注释,从/*开始,到/结束,时一种支持提取的注释

变量的基本概念
  当需要再程序中记录单个数据内容时,则声明一个变量即可,而声名变量的本质就是再内存中申请一个存储单元,
  由于该存储单元中的数据内容可以发生改变,因此得名为“变量”
  由于存放的数据内容大小不一样,导致所需存储单元的大小不一样,在java语言中使用数据类型加以描述,为了便于下次
  访问还需要给该变量指定一个名字,用于记录该变量对应的存储单元。

变量的声明方式
  数据类型 变量名 = 初始值;
  其中: “=初始值"可以省略,但”;"不可以省略

变量使用的注意事项
  ①使用变量之前需要声明 //否则报错误:找不到分号
  ②使用变量之前需要初始化 //否则报错误:可能尚未初始化变量xxx
  ③变量不能重复声明

标识符的命名法则
  ①由数字,字母,下划线以及$等组成,其中数字不能开头
  ②不能使用java语言的关键字
  ③区分大小写,长度没有限制但不宜过长
  ④尽量做到见名知意,支持中文但不推荐使用

数据类型的分类
  (1)基本数据类型
    byte,short,int,long,float,double,boolean,char
  (2)引用数据类型
    数组,类,接口,枚举,标注

常用的进制

正十进制转换为二进制的方式
  ①除2取余法,使用十进制整数不断地除以2取出余数,直到商为0时余数逆序排列
  ②拆分法,将十进制整数拆分为若干个二进制权重的和,有该权重下面写1,否则写0

正二进制转换为十进制的方法
  ①加权法:使用二进制中的每个数字乘以当前位的权重再累加起来

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

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

java代码为什么有的要大写 java写不出代码怎么办_数组


  自我校验的方式:负的数值加上正的数值的出最后的值为0

java代码为什么有的要大写 java写不出代码怎么办_System_02


  因为是64为操作系统最后的出的数值是64个0前面有个1,因为高位溢出所以前面的1丢弃,所以最后值为0

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

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

  ①先减1再按位取反,合并为十进制整数后添加符号

java代码为什么有的要大写 java写不出代码怎么办_运算符_03


单个字节代表的整数范围

  在计算机中单个字节表示八位二进制位,其中最高位(最左边)代表符号位,使用0代表非负数,1代表负数。

  非负数表示范围:0000 0000 ~ 0111 1111 =>0 ~ 127

  负数表示范围:1000 0000 ~ 1111 1111 => -128 ~ -1

  结论:单个字节代表的整数范围是:-2^7 ~ 2^7-1 => -128~127

java代码为什么有的要大写 java写不出代码怎么办_System_04

整数类型
  Java语言中描述整数数据的类型有:byte,short,int,long,推荐使用int类型
  其中byte类型在内存空间中占1个字节(即 单个字节),表示范围:-2^7 ~ 2^7-1 (其中7是怎么来的呢?一个字节是8,而8-1=7)
  其中short类型在内存空间中占2个字节,表示范围:-2^15 ~ 2^15-1(其中15是怎么来的呢?两个字节是16,而16-1=15)
  其中int类型在内存空间中占4个字节,表示范围:-2^31 ~ 2^31-1
  其中long类型在内存空间中占8个字节,表示范围:-2^63 ~ 2^63-1
  在java程序中直接写出的整数数据叫做直接量/字面值/常量,默认为int类型。若希望表达更大的直接量,则在直接量的后面加上l或者L,推荐L。

浮点类型
  用来描述小数数据的类型:float和double,推荐double类型
  其中float类型在内存空间占4个字节,叫做单精度浮点数,可以表示7位有效数组,范围:-3.403E38 ~ 3.403E38 (E38含义 就是10^38)
  其中double类型在内存空间占8个字节,叫做双精度浮点数,可以表示15位有效数组,范围:-1.798E308 ~ 1.798E308
  笔试考点:System.out.println(0.1+0.2); //0.30000000000000004 说明float和double 在运算时可能会有误差,若希望实现精确运算则借助java.math.BigDecimal类型

布尔类型
  java中用于描述真假信息类型有:boolean,数值只有:true和false
  布尔类型在内存空间中所占大小没有明确的规定,可以认为只有1个字节

字符类型
  java语言中用于描述单个字符的数据类型:char类型。如:‘A’,'杨’等。
  其中char类型在内存空间中占2个字节并且没有符号位,表示范围时:0 ~ 65535。
  计算机的底层只识别0和1组成的二进制序列,对于字符’a’这样的图案来说不满足该规则,为了使该数据能够存储起来就可以个该数据指定一个编号,然后将编号存储起来,该编号就叫做ASCII
  要求掌握的ASCII有:‘0’ - 48,‘A’ - 65, ‘a’ - 97 ,空格 - 32,换行符 - 10
  Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位。
  要求掌握的转义字符有:" -> " , ’ -> ’ , \ -> \ , \t -> 制表符 , \n -> 换行符

自动类型转换
  java语言中基本数据类型之间的转换方式:自动类型转换和强制类型转换
  自动类型转换主要是指从小类型到大类型之间的转换. byte->short(char)->int->long->float->double
  强制类型转换主要是指从大类型到小类型之间的转换,语法格式:目标类型 变量名 = (目标类型)原类型变量名;

字符串连接符
  其既可以作为字符串连接符,又可以作为加法运算符
  只要+两边的操作数中有一个操作数时字符串类型,则该+就被当作字符串连接符处理,否则当作加法运算符处理

比较运算符
  >表示是否大于运算符
  >=表示是否大于等于运算符
  <表示是否小于运算符
  <=表示是否小于等于运算符
  ==表示是否等于运算符
  !=表示是否不等于运算符
  故所有以关系运算符作为最终运算的表达式结果一定是boolean类型

自增减运算符
  ++表示自增运算符;用于使得当前变量自身的数值加1的效果
  ++表示自减运算符;用于使得当前变量自身的数值减1的效果
  前后加加的区别:
  解析:其中ia++这个整体叫做表达式,其中iai叫做操作数/变量”
也就是ia++和ia表示不同的含义,所以所占的内存空间应该不同。
后++表示先让变量ia的数值作为整个表达式的最终结果,然后再让ia变量自身的数值加1.
  前++表示先让变量自身的数值加1,然后再让变量的数值作为整个表达式的结果

逻辑运算符
  &&表示逻辑与运算符,相当于”并且“,同真为真,一假为假。
  ||表示逻辑或运算符,相当于”或者“,一真为真,同假为假。
  !表示逻辑非运算符,相当于”取反“,真为假,假为真。
  逻辑运算符的操作数均为boolean表达式。
  逻辑运算符的短路特性:
    ①对于逻辑与运算来说,若第一个表达式为假则结果为假,此时跳过第二个表达式
    ②对于逻辑或运算来说,若第一个表达式为真则结果为真,此时跳过第二个表达式

三目/条件运算符
  语法格式:条件表达式?表达式1:表达式2
  判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2.

赋值运算符
  = 表示赋值运算符用于将=右边的数据赋值给=左边的变量,覆盖变量原来的数值
  赋值表达式本身也有值,其本身 之值即为所赋之值
  复合赋值:+=,-=,*=,/=,…
  笔试考点:

byte b1 = 10;
	b1 = b1 + 2 ; //错误:不兼容类型,从int转换到byte可能会有损失 byte + int 相加结果还是int类型
	b1 = b1 + (byte)2 ; //错误:不兼容类型,从int转换到byte可能会有损失 byte + byte 相加结果还是int类型 编译器优化(因为byte容量很小,当两个byte相加时很可能出现溢出的风险,故编译器将其转换成int类型)
	b1 += 2; //真正等价于 b1 = (byte)(b1 + 2 );其不仅简化了变量名而且自带强转。
	
	ia == 2; //表示判断变量ia的数值是否等于2
	2 == ia; //表示判断2是否等于变量ia的数值,从结果上来说等价,推荐该方式
	ia = 2;  //表示将2赋值给变量ia,覆盖变量ia原来的数值
	2 = ia;  //编译错误 错误:意外的类型

移位运算符(了解)
  << 左移运算符,用于将数据的二进制位向左移动,右边使用0补充。
  >> 右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充。
  >>> 逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0补充。
代码示例:

/*
		编程实现移位运算符的使用
	*/

	public class MoveBitTest {
		
		public static void main(String[] args) {
			
			byte b1 = 13;
			System.out.println("b1 = " + b1 );
			System.out.println("-----------------------");
			//移位运算符的使用
			// 13的二进制是:0000 1101 =>左移1位的结果是:0001 1010 =>换算十进制为:26
			byte b2 = (byte)(b1 << 1); //错误: 不兼容的类型: 从int转换到byte可能会有损失
			System.out.println("b2 = " + b2 ); //26 
			System.out.println(b1 << 1); //26 左移1位相当于当前整数的数值*2
			System.out.println(b1 << 2); //52 左移12位相当于当前整数的数值*4
			System.out.println("-----------------------");
			
			// 13的二进制是:0000 1101 =>右移1位的结果是:0000 0110 =>换算十进制为:6
			System.out.println(b1 >> 1); //26 左移1位相当于当前整数的数值/2
			System.out.println(b1 >> 2); //52 左移12位相当于当前整数的数值/4	
			System.out.println("-----------------------");
			
			//逻辑右移 对于非负来说,逻辑右移和右移的效果一致
			System.out.println(b1 >>> 2); //3
		}
	}

位运算符(了解)
  &表示按位与运算符,按照二进制位进行与计算,同1为1,一0为0.
  |表示按位或运算符,按照二进制位进行或计算,一1为1,同0为0.
  ~表示按位取反运算符,按照二进制位进行取反,1为0,0为1.
  ^表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.
代码示例:

/*
		编程实现位运算符的使用
	*/

	public class BitTest {
		
		public static void main(String[] args) {
			
			byte b1 = 11;
			byte b2 = 13;
			System.out.println("b1 = " + b1 );
			System.out.println("b2 = " + b2 );
			
			System.out.println("-----------------------");
			//实现位运算符的使用
			//b1的二进制:0000 1011  
			//b2的二进制:0000 1101
			System.out.println(b1 & b2); //按位与:同1为1,一0为0. 0000 1001 =>转为十进制是:9
			System.out.println(b1 | b2); //按位或:一1为1,同0为0. 0000 1111 =>转为十进制是:15
			System.out.println(b1 ^ b2); //按位异或:相同为0,不同为1. 0000 0110 =>转为十进制是:6
			System.out.println( ~ b1);	 //按位取反:1为0,0为1. 1111 0100 =>转为十进制是:-12
		}
	}

数组及其应用

一维数组

  其本质就是在内存空间中申请一段连续的存储单元

  数组是相同数据类型的多个元素的容器,元素按线性顺序排列,在java语言中体现为一种引用数据类型

  语法格式:数据类型[] 数组名称 = new 数据类型[数组的长度]

  调用数组的length属性可以获取数组的长度,数组名.length

  数组的下标从0开始,对于长度为n的数组,下标的范围是0 ~ n-1

内存结构分析:

  内存结构之栈区:栈用于存放程序运行过程当中所有的局部变量。

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

  int num = 2; int[] arr1 = new int[2];在底层中的样子

java代码为什么有的要大写 java写不出代码怎么办_java代码为什么有的要大写_05

  可看出基本数据类型中内存所放的是具体的数据内容,而引用数据类型内存中所放的是指向堆区的地址

一维数组优缺点:
  ①可以通过下标的方式访问指定位置的元素,速度快。
  ②要求所有元素的类型必须相同。
  ③要求内存空间连续,并且长度一旦确认不可修改。
  ④增加和删除元素时需要移动大量的元素,浪费时间。

数组拷贝:
  使用java官方提供的拷贝功能:System.arraycopy();

数组工具类常用方法:
  static String toString(int[] a) 输出数组中的内容
  static void fill(int[] a,int val) 将参数指定元素赋值给数组中所有元素
  static boolean equals(boolean[] a1,boolean[] a2) 判断两个数组元素内容和次序是否相同
  static void sort(int[] a) 对数组中的元素进行从小到大排序
  static int binarySearch(int[]a,int key) 对数组中查找参数指定元素所在的位置
二维数组:
  每一个数组元素本质都是一个一维数组。
  int[] arr = new int[6];
  int[][] brr = new int[2][6];
  其中:
  arr.length代表一维数组arr的长度,也就是元素的个数
  brr.length代表数组brr的长度,也就是元素的个数,也就是一维数组的个数,也就是行数。
  brr[0].length代表二维数组中第一个元素的长度,也就是一维数组的长度,也就是第一行的列数。