IT十八掌第四天课程总结(含作业)

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时 就可以正常运行了


你可能感兴趣的:(作业)