• 我们的java基础究竟有多差 一个视频引发的感想


           以此文来警示自己。 

           大三要结束了。

           我从大一下学期開始接触java,两年半了。期间有非常努力的自学,也參与了一下项目。满以为自己的java基础应该不错,但今天在网上看了一个视频才发现自己学的是多么的“浅”,知道了自己的java基础还非常差。敲代码不是能够实现功能就能够了,还要考虑效率。也许定义一个变量仅仅会多占用几个比特位。一个for循环仅仅会多消耗几毫秒,但当一段段代码组成一个个庞大的系统时,弊端就显露出来了。就像视频里说的,我们写出来的项目仅仅会是一个个12306。

           也许是科班出身的我们被教的东西不够吧,有些东西还是得自己努力去探索的。即使是基础知识,也不容小觑。由于基础也不是像你想的你们的简单。

          以下奉上看视频做的笔记。经验丰富的高手们肯定都知道。望勿喷。

         

    package test;
    
    import java.math.BigDecimal;
    
    public class TestData {
    
    	/**
    	 * 数据类型 :基本数据类型   引用数据类型(自己定义)   
    	 * 基本数据类型:byte short int long float double char boolean
    	 *       字节       1     2    4   8    4       8    2
    	 *       
    	 * float :32位(1+8+23)  符号位+幂指位+数值位
    	 * double:64位(1+11+52)
    	 */
    
    	public static void main(String[] args) {
    		//给char型赋值有四种方法
    		char c1 = 'a';          //直接赋值
    		char c2 = 97;           //ASCII码赋值
    		char c3 = 'u4e2d';     //unicode编码赋值   后面是16进制
    		char c4 = '	';         //转义字符
    		System.out.println(c1+"&"+c2+"&"+c3+"&"+c4+"&");   //a&a&中&	&
    		
    		//int型赋值
    		int n1 = 30;                //直接赋值
    		int n2 = 0b11110;           //二进制赋值 0b+ ||30=16+8+4+2  ||除2取余 15_0 7_1 3_1 1_1 0_1 -> 11110
    		int n3 = 0x1e;              //16进制赋值 0x+ ||转二进制 00011110  转16进制 1E 
    		int n4 = 036;               //8进制赋值 0+   ||除8取余  3_6 0_3  36
    		System.out.println(n1+"|"+n2+"|"+n3+"|"+n4+"|");   //30|30|30|30|
    		//char+int+String 先做加法 再拼接
    		System.out.println('1'+1+"1");   //501  char型的1表示ASCII码为49  49+1+"1" = 501 
    		//String+int+char 拼接再拼接
    		System.out.println("1"+1+'1');   //111
    		//char+char 做加法
    		System.out.println('1'+'1');     //98   49+49=98
    		//2.0-1.1
    		System.out.println(2.0-1.1);        //0.8999999999999999
    		System.out.println(2.0f-1.1f);      //0.1
    		/**
    		 * double: 2.0转为2进制 10.0000000000000000(16位处截断)   
    		 *         1.1转为2进制 01.0001100110011001  (1二进制为1, 小数:0.1*2=0.2_0 0.2*2=0.4_0 0.4*2=0.8_0 0.8*2=1.6_1 0.6*2=1.2_1 0.2*2=0.4_0)
    		 *         相减得0.1110011001100111 转为10进制-0.8999999999999999
    		 * float   先按double计算,然后四舍五入为0.9f
    		 * 解决方法:使用BigDecimal     
    		 */
    
    		BigDecimal b1=new BigDecimal("2.0");
    		BigDecimal b2 = b1.subtract(new BigDecimal("1.1"));
    		System.out.println(b2);            //0.9
    			
    		
    	}
    
    }
    

    package test;
    //运算符
    public class TestOperator {
    
    
    	public static void main(String[] args) {
         //取模运算符 符号位取决于第一个数
    		System.out.println(5%3);       //2
    		System.out.println(-5%3);      //-2
    		System.out.println(5%-3);      //2
    		System.out.println(-5%-3);     //-2
    		System.out.println(2%2);       //0
    		System.out.println(-2%2);      //0
    
    	 //非短路运算符[& | ]和短路运算符[&& ||]
            int num = 5;
    		if(++num < 4 && num++ > 1)
    			 System.out.println("qwer");
    		System.out.println(num);
    		//结果是:6      
    		//短路运算符前面推断为false 后面的就不再运行了(对与运算来说,对或运算相反)
    	    num = 5;
    	    if(++num < 4 & num++ > 1)
    			 System.out.println("qwer");
    		System.out.println(num);
    		//结果是7
    		//非短路运算符全运行
    		
    		
        //按位运算符
    		//当一个正数%2的n次方时,等价于&(该2的n次方-1)
    		System.out.println((100&1)==100%2);        //true
    		System.out.println((100&3)==100%4);        //true
    		System.out.println((100&7)==100%8);        //true
    		System.out.println((100&15)==100%16);      //true
    		System.out.println((100&31)==100%32);      //true
    		
    		//权限的实现 1:权限1   2:权限2   4:权限3   8:权限4
    		//以他们的和表示权限  如3=1+2   7=1+2+4   9=1+8
    		//用自己的权限&某一权限的代表数字  可得知自己有无该权限
    		System.out.println((9&1)==1);       //true   表示有权限1
    		System.out.println((9&2)==2);       //false
    		System.out.println((9&4)==4);       //false
    		System.out.println((9&8)==8);       //true
    		
    		
    		// 在不借助第三块空间的条件下 交换两个数
    	    //使用按位异或运算符
    		int a = 1;
    		int b = 2;
    		a = a ^ b;
    		b = a ^ b;
    		a = a ^ b;
    		System.out.println(a+" "+b);          //2 1
    	     //加减法
    		 a = 1;
    		 b = 2;
    		 a = a + b;
    		 b = a - b;
    		 a = a - b;
    		 System.out.println(a+" "+b);        //2 1
    		 
    		//不局限的利用for循环
            //打印a-z
    		 for(int i = 97;i<123;i++){
    			 System.out.print((char)i);
    		 }
    		 //这样真的好吗? 看看以下的:
    		 System.out.println();
    		 for(char c='a';c<='z';c++){
    			 System.out.print(c);
    		 }
    		 //另外一种仅仅利用char的16个位  第一种还须要利用int的32个位
    
    	}
    
    }
    


  • 相关阅读:
    HBuilder在线打包ipa步骤
    SWD烧录/仿真方式
    详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]
    Centos/Linux下调整分区大小(以home和根分区为例)
    Centos6.5安装中文支持和中文输入法
    如何用电路实现检测过零点?这个简单电路就能搞定
    ifconfig无输出的原因及解决办法
    Linux云服务器下Tomcat部署
    linux wget 命令用法详解(附实例说明)
    yum的repo文件详解、以及epel简介、yum源的更换
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6729523.html
Copyright © 2020-2023  润新知