黑马程序员 基础(-)



---------- android培训java培训、java学习型技术博客、期待与您交流! ------------

题记:

            自从接触黑马以来,在论坛里也结识了很多志同道合的坛友,我知道梦想是什么含义了,就像电影《肖申克的救赎》里面的男主人公,监狱中一个六米厚的墙被一个小锤子给敲出一个逃生洞,还有一个鲜明的例子,张歆明大哥为了进黑马,熬战了整整两个月。这是黑马带给每一个有梦想的人的积极意义,黑马的目的不是为了工作而工作,而是为了磨练一个人,改变这个人对价值观,人生观,世界观的看法。不在扯了,进入正题。

 

1,负数的二进制表示

        正数的二进制,很容易,不用多说,但是负数的二进制很多人都知道取反加一,但是就是容易错,

        正确的步骤是:

        a)不考虑符号位,用正数的方式求出二进制

        b)对a中的二进制取反,加上符号位,

        c)将b中的取反的值与1相加(二进制相加)

        规律:   负数二进制的最高位为1  -6: 11111111111111111111111111111010
         *         正数二进制的最高位为0    6: 00000000000000000000000000000110

        -6的求取过程:

                    a)求出不带符号的二进制表示 00000000000000000000000000000110

                    b)对a结果求反                           11111111111111111111111111111001

                    c)对b结果加1                              11111111111111111111111111111010

          用java代码验证,顺便给出求一个整整二进制的方法

	public static void negative(){
		int a = 6, b = -6;
		String a1 = Integer.toBinaryString(a&0xffffffff);
		String b1 = Integer.toBinaryString(b);
		System.out.println(a1);
		System.out.println(b1);
	}

结果演示:


 2,基本数据类型的大小

        基本数据类型有八个,那么这些类型的大小是多少,容易混淆的是short,int,long,double,关键的一个类型char型,它是两个字节,用程序验证(程序方返回的是bit位数,需要除以8才行)。

	public static void sizeOfType(){
		//整形:4种
		System.out.println("byte: \t"+Byte.SIZE/8+"字节");
		System.out.println("short:\t"+Short.SIZE/8+"字节");
		System.out.println("int:\t"+Integer.SIZE/8+"字节");
		System.out.println("long:\t"+Long.SIZE/8+"字节");
		//浮点型:2种
		System.out.println("float:\t"+Float.SIZE/8+"字节");
		System.out.println("double:\t"+Double.SIZE/8+"字节");
		//布尔型:没有找到现实方法,在网上搜索,是1字节
		System.out.println("boolean:1字节");
		//字符型:char
		System.out.println("char: \t"+Character.SIZE/8+"字节");
	}

结果演示:

3,取模的问题

        正数取模都会做,如果加上负数操作,那么怎么算呢?

         诀窍:结果的符号和被模数同号,%前面的数字符号,如果是正号,则结果是正数,否则是负数

	public static void method_mod(){
		System.out.println(-7%5);
		System.out.println(7%5);
		System.out.println(7%-5);
		System.out.println(-7%-5);
	}

结果演示:

4,instanceof

        instanceof 是运算符,返回结果是boolean型,主要用于类型检查,通常情况下instanceof类型检查检查类型的最终类型,不建议用超类去检查,instanceof的作用是在编译时就检查对象的合法性,所以第四句编译都无法通过。

public static void method_instanceof(){
		//instanceof 是运算符,返回结果是boolean型
		Integer a = 0;
		System.out.println(a instanceof Object);
		System.out.println(a instanceof Number);
		System.out.println(a instanceof Integer);
		//System.out.println(a instanceof String);
	}

结果验证:

5,XOR操作

        有些方法可以为程序带来节省空间的效果,交换两个数,一般的想法是申请一个临时变量,作为中转,这样空间开销就多一些。优化的方法就是异或操作,不需要申请变量,直接操作两个变量就可以,同时代码也会大大简化。异或可以交换数值类型中不带小数点的类型(float,double不可以),char,boolean也可以。包装类中Integer,Long,Boolean可以使用异或操作 。

	public static void method_xor(){
		
		Long a1 = 3l, a2 =5l;
		System.out.println(a1+"\t"+a2);
		a1^=a2;a2^=a1;a1^=a2;
		System.out.println(a1+"\t"+a2);
		
		Boolean b1 =true,b2 = false;
		System.out.println(b1+"\t"+b2);
		b1^=b2;b2^=b1;b1^=b2;
		System.out.println(b1+"\t"+b2);
		
		char c1 = 'A',c2 = 'D';
		System.out.println(c1+"\t"+c2);
		c1^=c2;c2^=c1;c1^=c2;
		System.out.println(c1+"\t"+c2);
		
		byte d1 = 34,d2 = 46;
		System.out.println(d1+"\t"+d2);
		d1^=d2;d2^=d1;d1^=d2;
		System.out.println(d1+"\t"+d2);
		
	}

结果验证:

 

6,三目运算符 ?:;

        三目运算符的原型是根据if...else...方法进化而来,大大方便了代码的书写,可读性也提高了,也比较整洁。

        注意:三目运算符不能单独使用,需要有返回值,否则编译不通过,简单说就是表达式前面要有“=”号,还有一个注意的地方就是“:”两边的表达式返回值不能为空,例如以下代码:

public static void method_if(){
		boolean flag = true;
		if(flag){
			System.out.println("flag is "+flag);
		}else{
			System.out.println("flag is"+flag);
		}
	}

千万不能用三目运算符这样写:

flag == true ? System.out.println("flag is "+flag) : System.out.println("flag is"+flag);

原因是System.out.printin()方法返回void,下面给一个代码实例,顺便把类型提升融入进去,‘a’'被提升为int型,

public static void type_promotion(){
		int x = 2,y;
		System.out.println(y = x > 1 ? 'a' : 200);
	}

验证结果:

7,精度范围问题

         long a = 3;这句代码有问题吗,乍一看,没有问题,但是它确实有问题,编译器不通过了!问题出在哪呢?

        原因出在精度上以及默认的情况各种常量值对应的数值类型!整形默认的是int型,带小数点的默认是double型,精度范围如下:

        double > float > long > int > short > byte --> 在没有强制转换的情况下(cast),确保精度不损失是编译通过的必要条件

public static void assignment_statement(){
		//正确:byte类型数据范围是-128~127
		byte a = 2; 
		//Type mismatch: cannot convert from int to byte
		//byte a1 = -129;  
		//byte a2 = 128;
		
		//正确:short类型的数据范围是-32768~32767
		short s = 30000;
		//Type mismatch: cannot convert from int to short
		//short s1 =-32769; 
		//short s2 = 32768;
		
		//Type mismatch: cannot convert from long to int
		//int i = 41l;
		//Type mismatch: cannot convert from double to int
		//int i1 = 3.2;
		//Type mismatch: cannot convert from float to int
		//int i2 = 3.2f;
		//正确 
		int i4 = 41;
		//Type mismatch: cannot convert from double to float
		//float f1 = 2.3;
		//正确
		float f2 = 2.3f;
		//正确
		double d1 =2.3;		
	}

8,switch...case..方法

        相对于if...else if....else if....else..方法来说,switch更有效率,.switch是计算一次地址值,然后直接跳转到执行语句,相当于索引,而if...else if....else...每个分支都要判断,直到找到符合条件为止,switch可以操作的对象有int,short,byte,char,Enum(boolean,long,string)还不支持。

public static void switch_case_type(){
		int x = 1;
		switch (x) {
		case 1:
			System.out.println("int");
			break;
		default:
			break;
		}
		
		byte b = 1;
		switch (b) {
		case 1:
			System.out.println("byte");
			break;
		default:
			break;
		}
		short c = 1;
		switch (c) {
		case 1:
			System.out.println("short");
			break;
		default:
			break;
		}
		char d = 'a';
		switch (d) {
		case 'a':
			System.out.println("char");
			break;
		default:
			break;
		}
		//java5之后接受enum类型,
		Color color = Color.red;
		switch (color) {
		case red:
			System.out.println("enum");
			break;
		default:
			break;
		}
		//java7之后接受String类型,自己版本低,无法实现	
	}

代码验证:

补充:default可以在任何地方。放在第一个位置也可以,但是却是最后一个被执行,如果条件都不满足的话!

----------android培训java培训、java学习型技术博客、期待与您交流! ------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值