以此文来警示自己。
大三要结束了。
我从大一下学期开始接触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个位 } }
版权声明:本文为博主原创文章,未经博主允许不得转载。