java基本数据类型: ----------------------- byte : 一个字节,-128 ~ 127 = 256 short : 两个字节, -32768 ~ 32767 int : 四个字节, long : 八个字节, float : 4字节 double : 8字节 boolean : 1个字节 char : 2个字节 /** * 基本类型演示 */ class BaseTypeDemo { public static void main(String[] args) { //字节型变量, byte b1 = 127 ; System.out.println("字节型变量b1 = " + b1); //short //int //long long l1 = 12L ; System.out.println("长整型变量l1 = " + l1); //float float f1 = 3.14f ; //double double d1 = 3.14 ; System.out.println(new Double(d1).toString()); //boolean //char } } /** * 将字节类型数组转换成十六进制的字符串表现形式 */ class Byte2Hex{ public static void main(String[] args){ byte b = 108 ; System.out.println(convert(b)); } //转换函数 public static String convert(byte b){ //1.取出字节b的低四位的数值 int low = b & 0x0F ; //低四位0-15 //2.取出高四位的值,先将b向右移动4位 int high = (b >> 4) & 0x0F ; //高四位0-15 //定义字符数组 char[] arr = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ; //拼接串 return "" + arr[high] + arr[low] ; } } 运算符 ------------ 算数:(+号) (-号) + - * / % (+号) (-号) a++ ++a b-- --b 赋值:= += -= *= /= %= 布尔表达式的逻辑运算符 ------------------------ 1.| : 单或,没有短路情况。 2.& : 单与,同上。 3.^ : 异或,a == b->false a !=b -> true 4.! : 取反 5.&& : a && b ,a == false ,b 不运算,短路了。 6.|| : a || b ,a == true , b 不运算,短路了。 /** * 运算符演示 */ class CalcDemo{ //入口点 public static void main(String[] args){ //定义整型变量 int a = 3 ; int b = 5 ; //+-符号 System.out.println("****** 正负号 *********"); System.out.println("+a = " + (+a)) ; System.out.println("-a = " + (-a)) ; //算术运算符 + - * / % System.out.println("****** 算术运算符 *********"); System.out.println("a + b = " + (a + b)); // System.out.println("a - b = " + (a - b)); // System.out.println("a * b = " + (a * b)); // System.out.println("a / b = " + (a / b)); System.out.println("a % b = " + (a % b)); //赋值运算符 a += b ==> a = a + b System.out.println("****** 赋值运算符 *********"); System.out.println("a += b = " + (a += b)); // System.out.println("a -= b = " + (a -= b)); // System.out.println("a *= b = " + (a *= b)); // System.out.println("a /= b = " + (a /= b)); // System.out.println("a %= b = " + (a %= b)); // //比较运算符 System.out.println("****** 比较运算符 *********"); System.out.println("a == b = " + (a = b)); // System.out.println("a != b = " + (a != b)); // System.out.println("a > b = " + (a > b)); // System.out.println("a >= b = " + (a >= b)); // System.out.println("a < b = " + (a < b)); // System.out.println("a <= b = " + (a <= b)); // //逻辑运算符 boolean b1 = false ; boolean b2= true ; System.out.println("****** 逻辑运算符 *********"); System.out.println("b1 | b2 = " + (b1 | b2)); //true System.out.println("b1 & b2 = " + (b1 & b2)); //false System.out.println("b1 ^ b2 = " + (b1 ^ b2)); //true System.out.println("!b1 = " + !b1); //true System.out.println("b1 || b2 = " + (b1 || b2)); //true System.out.println("b1 && b2 = " + (b1 && b2)); //false //位运算符 System.out.println("****** 逻辑运算符 *********"); a = -7 ; b = 3 ; //1111 1111 - 1111 1111 System.out.println("a << 2 = " + (a << 2)); //12 System.out.println("a >> 2 = " + (a >> 2)); //0 System.out.println("a >>> 2 = " + (a >>> 2)); //0 System.out.println("a | b = " + (a | b)); //7 System.out.println("a & b = " + (a & b)); //1 System.out.println("a ^ b = " + (a ^ b)); //6 System.out.println("~a = " + (~a)); //-4 // } } /** 计算所有元素的总和 */ class SumDemo{ public static void main(String[] args){ //int result = sum(new int[]{1,2,4,5,6}); System.out.println(multi(4)); } //计算数组的总和 public static int sum(int[] arr){ int sum = 0 ; //循环数组 for(int i = 0 ; i < arr.length ; i ++){ //开始累加 sum = sum + arr[i] ; } return sum; } //计算数的阶乘 public static int multi(int n){ int result = 1 ; for(int i = 1 ; i <= n ; i ++){ result = result * i ; } return result ; } } java中数字的表现形式 ------------------------ 1.十进制 int x = 100 ; 2.八进制 int y = 077 ; 3.十六进制int z = 0xef; 将一个byte数变换成00-FF之间的一个字符串 ---------------------------------------- 思路:将b和十六进制数0x0F做&运算取得低四位的值。 再将b右移4位,再次和0x0F做&运算取得高四位的值。 构造字符数组,按下标取得对应的字符即可。 默认情况下,java内存式1/4物理内存. 常看java进程id使用jps 查看指定java进程的堆内存信息使用:jmap -heap pid 设置java堆内存参数: java -Xmx1g //设置最大堆内存 -Xms1g //设置初始堆大小 className//类名 答:堆内存的默认最大空间是物理内存的1/4,在运行java程序时,可以通过 -Xms初始堆内存的大小,-Xmx设置最大堆内存的大小; /** 测试堆内存 */ class HeapDemo{ public static void main(String[] args){ byte[] b = new byte[1024]; //System.out.println(b.length); while(true){ System.out.println("aa"); } } } 第四天 &和&& 双与 有短路 单& 不会出现短路的原因(在位运算中也存在单&,位运算需要两个数进行运算,因此不可能出现短路情况) 布尔表达式的逻辑运算符 ------------------------ 1.| : 单或,没有短路情况。 2.& : 单与,同上。 3.^ : 异或,a == b->false a !=b -> true 4.! : 取反 false--> true 5.&& : a && b ,a == false ,b 不运算,短路了。 6.|| : a || b ,a == true , b 不运算,短路了。 位运算 << >> >>>(无符号右移) & | ^ ~(对数字取反) class CalcDemo{ public static void main(String[] args) { int a = 1 ; int b = 3; System.out.println("a << 2 =" + ( a << 2)); System.out.println("a >> 2 =" + ( a >> 2)); System.out.println("a >>> 2 =" + (a >>> 2)); System.out.println("a & b =" + ( a & b )); System.out.println("a | b =" + (a | b )); System.out.println("a ^ b =" + (a ^ b)); System.out.println(" ~ a =" + ( ~ a )); } } Byte-->16进制 /* *主要思想是将byte的 8位 二进制 分割成两部分,分为高四位和低四位 * 低四位通过 该数字 和OXOF(15)进行与运算,取出低四位的值 * 高四位 通过先移位将高四位位移到低四位 然后再做与运算的方式取出 */ class Convert16{ public static void main(String[] args) { byte b = 110; //取byte中的数字 110 System.out.println(convert( b)) ; // 调用函数 convert 并打印 } //定义该数的高四位和低四位 public static String convert(byte b){ //定义String类型的convert int low4 = b & 0x0f; //取出低四位 int high4 = (b>>4) & 0x0f; //取出高四位 char [] arr = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //定义数组[0-F] return "" +arr[high4]+arr[low4] ; //返回一个16进制的值 (String类型,所以加个“”) } } 累加求和 累乘求积 就积 class Accumulate{ public static void main(String[] args) { System.out.print(acc(new int []{1,3,5,7,9})); //调用acc方法 打印定义的数组的 累乘的积。 } //输出数组累乘的结果acc public static int acc (int[] arr){ //定义 int 型数组arr int acc = 1; //让acc赋值为1, 1乘任何数都为本身 for ( int i =1 ;i<arr.length ;i ++ ){ //遍历 acc *= arr[i] ; // } return acc ; //返回acc } } 函数的转置 class ArrayTrans{ public static void main(String[] args) { int [][] arr={{1,2,3,},{4,5,6},{7,8,9,}}; //定义函数 out(arr); // 输出数组 System.out.println("*********************");// 为了对比效果 打印*来隔开 arr=trans(arr); //将trans 取arr数组的值 out(arr); //输出arr } //定义转置 public static int [][] trans(int [][] arr){ int temp = 0 ; for (int i = 0; i<arr.length-1 ;i ++ ){ //定义数组的取值范围 for (int j = i+1; j < arr[i].length ;j++ ){ //定义数组列数 // 利用中间量的方法完成置换 temp = arr[i][j]; arr[i][j]= arr[j][i]; arr[j][i]= temp; } } return arr; } //打印出arr[i][j]的值 public static void out(int[][] arr){ //定义out for (int i = 0; i<arr.length ;i ++ ){ for (int j = 0; j < arr[i].length ;j++ ){ System.out.print(arr[i][j]+"\t"); //打印出arr[i][j]的值 } System.out.println(); //换行 } } } /* 1 2 3 4 5 6 7 8 9 *************************** 1 4 7 2 5 8 3 6 9 */ 横向打印3层数列 class Arrayaa { public static void main(String[] args) { int[][][] arr = {{{1,2,3,},{4,5,6,},{7,8,9}},{{10,11,12},{13,14,15},{16,17,18}},{{19,20,21},{22,23,24},{25,26,27}}};//定义一个三位数组 array(arr); } //横向输出三维数组 public static void array (int [][][] arr){ for (int i = 0;i < arr[0].length ;i++ ) { //定义行 循环 for (int j =0 ; j < arr[i].length ;j++ ){ //输出所有列 for (int k = 0;k <arr[j][i].length ;k ++ ){ //输出每层上相同行数的元素 System.out.print(arr[j][i][k]+"\t");// } System.out.print(" | "); } System.out.println(); } } } 输出 /* 1 2 3 | 10 11 12 | 19 20 21 | 4 5 6 | 13 14 15 | 22 23 24 | 7 8 9 | 16 17 18 | 25 26 27 | */ 问题 ******************************************* 为什么int(int j = 0;j< arr[i].length ;j++) 输出的是列数 但是后面打印arr[][][]时却是arr[j][i][k];j为什么表示为层数 ******************************************* 默认情况下,java内存式1/4物理内存. 常看java进程id使用jps 查看指定java进程的堆内存信息使用:jmap -heap pid 测试java heap的大小 class HeapDemo{ public static void main(String[] args) { byte [][] arr = new byte [1024] [1024*512*1]; System.out.println(arr.length); } } 结果 C:\Users\cc\Desktop>java HeapDemo 1024 将数组改为[1024][1024*1024*1] C:\Users\cc\Desktop>java HeapDemo Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at HeapDemo.main(HeapDemo.java:4) 堆内存溢出 (因为默认值为物理内存的1/4 该电脑内存为3.+G所以当长度超过1G时 显示为溢出) 手动修改Heap大小 C:\Users\cc\Desktop>java -Xms2g HeapDemo 1024 当修改为默认大小为2G时 就可以正常运行了