学习java 第一个月第四天

一.补充

jdK 1.0 后

int num=45  045  0x45

Jdk7.0 后

int num=00b0101; //二进制

System.out.println(10_10_111);//1010111  可以这样写

进制转换  二进制转十进制无需多言  八进制转十进制 无需多言

各数据类型的默认值

/**
    boolean - false
    char - '\u0000' [空格]
    byte - 0
    short    int long float double
     0        0      0L      0.0F 0.0

    引用数据类型的默认值 都是 null
*/

二.开始新的java中的运算符

1【+ - * / %】 .

+号

算数加法 追加连接 

【最小的数据类型int,char+char=int】

int +int =int

char+char=int

int +char=int

int +String=String

char+String=String

double+String=String

String+String=String

总结:最小的数据类型int,String和任意类型为String,出现String类型,””+任意类型=String类型

特例
Byte x=45;
Byte y=56;
Byte z=x+y;//错误 必须强转啊 Byte z=(int)(x+y);
System.out.println(z);    最小单位是int

-号

无需多言

*号

注意一点 乘以太大的数超过类型范围时需要切换数据类型 BigDecimal

/ 号 注意的地方有两个例外

System.out.println(5.0/0.0);//Infinity 无穷
System.out.println(5/0);//报错
System.out.println(0.0/0.0);//NaN Not a Number

% 模运算 取余

最终结果符号取决于参与运算的第一个数字

5%2=1

5%-2=1

-5%2=-1

-5%-2=-1

进度条 
百分号
System.out.println(512.0/1024.0*100+"%");//换成double类型可以
System.out.println(512*100/1024+"%");//利用数学方式提前*100
public class Exec2{
	public static void main(String[]args){
		//如何求出100以内最大的7的倍数
		System.out.println(100-100%7);// 100-(100-7-7-7-7-7....)
		System.out.println(100/7*7);//数学方式 /7获得多少个7  然后*7
	}
}

2.+=  -=  *=  /=  %=

思考:

        int num=45;
		//num=45+5.5;//报错了
		
		System.out.println(num);

 如果使用 num+=5.5 就不会报错 所以这就提到了隐式类型强转了,以下书写

 int y=10;

y+=5; y=y+5;;y=5+y;

int x=10;

x=x-5; x-=5;但不能等于 x=5-x;

 int z=10;

z*=5; z=z*5;;

int m=10;

m=m/5;m/=5;但是不能等于 m=5/m

3.【++  -- 】自增自减 

 主要是两方面  取值 运算

x++ 先取值  再运算

++x 先运算 再取值

面试题 x=x++; 

4.[>   <  >=  <=  !  =  !=  ==] 

System.out.println(12>'a');// false

System.out.println(98>'a');//true

“!” 取反

boolean          !true =false

boolean flag=true;

If(flag=true) 可以 因为留下的是boolean类型

面试题=和==的区别:

    ```java
    = 赋值运算符 将=右侧的值交给左侧的变量保存
    == 判断运算符 判断左右两侧的值是否相等[true/false]
    ```

 5.【&& || & |】逻辑运算符 

&& & 与并且 两个条件 同时成立  为true

|| |  或者  有一个成立即可 为true

面试题:

&& 和& 之间的区别

相同点:&&和&都表示与 相当于汉文中并且的含义

不同点: && 又称短路与 具有短路特性[效率高]

短路特性:如果可以通过前面的条件获取最终的结果【false】 后面的条件不再判断

|| 和|之间的区别

相同点:||和|都表示或 相当于汉文中或者的含义

不同点:|| 又称短路或 具有短路特性[效率高]

短路特性:如果可以通过前面的条件获取最终的结果【true】 后面的条件不再判断

boolean && boolean

  true       继续判断

boolean ||boolean

 true       不判断了

public class Test01{
	public static void main(String[] args){
		int num=45;
		if(num++>45&&++num<56){
			System.out.println("Hello");//不打印
		}
		System.out.println(num);//46
		if(num++>45&++num<56){
			System.out.println("Hello");//打印
		}
		System.out.println(num);//48
	}
}

6【& | ^ ~】位运算符

所谓的位运算符即 二进制计算

& 1&1=1,其他为0

|  1|1=1  1|0=1   0|1=1  0|0=0

异或 ^  相同为0  不同为1

~ 按位取反

~45=~00101101

   =11010010

按位与 &  取代%运算  必须要记住的

%2 %4 %8 %16 %2^n

&1 &3 &7 &15 %2^n -1

面试题 交换x和y的数据

1.开辟第三方空间

Int k=x;

X=y;

Y=k;

2.使用三步异或交换  相比之下开辟第三方空间更快

^交换变量的内容

Int x=45;

Int y=56;

x=x^y;

y=x^y;

x=x^y;

& 运算优先级小于==

If((num&1)==0)也可以写成if(num%2==0);

public class Test03{
	public static void main(String[] args){
		char c1='o';
		char c2='k';
		//1.开辟第三空间  交换
		char c3=c1;
		c1=c2;
		c2=c3;
		System.out.println("c1:"+c1+" c2:"+c2);
		//2.使用异或  char异或以后居然是int类型
		c1=(char)(c1^c2);
		c2=(char)(c1^c2);
		c1=(char)(c1^c2);
		System.out.println("c1:"+c1+" c2:"+c2);

		double d1=45.5;
		double d2=56.6;
		double d3=d1;
		d1=d2;
		d2=d3;
		System.out.println("d1:"+d1+" d2:"+d2);
	}
}

 关于异或,并不是所有数据源类型都可以使用异或交换数据 只适合六种基本数据类型

boolean char byte short int long 可以使用异或 小数是不能使用异或的

7.【>>  <<  >>>】

左移右移运算符 位移 二进制运算符

正数

01010101 >>1  右移变小
00101010  变小了

/2   /4   /8   /16...  /2^n

>>1  >>2  >>3  >>4   >>n

*2   *4   *8   *16...  *2^n

<<1  <<2  <<3  <<4   <<n

面试:>>  >>>区别

>>称为有符号的右移 高位补的内容看原本的符号位

01010101 >> 3=00001010

11010101 >> 3=11101010

>>>无符号的右移 高位直接补0好吧

11010101 >> 3 =00011010

8.【?:】三目运算符

boolean ? 2:3  

  - 第一部分永远是 boolean 类型
  - 如果第一部分结果是true 那么执行第二部分
  - 如果第一部分结果是false 那么执行第三部分

下面三目运算符特例:

System.out.println(45>56?’a’:65);//  A

System.out.println(45<56?’a’:65539); // 65539

9.记住常用的取代

& 取代 %
x % 2^n   = x & 2 ^n - 1
<< 取代 *
x * 2^n   = x << n
<< 取代 /
x / 2^n   = x >> n

三.java中的变量

 java中的变量

 1 java中的变量有哪些?

```java
成员变量 实例变量 属性【类体 方法体外】
局部变量 自动变量 【方法体中】
*java中没有全局变量的概念!!!
```

2 成员变量和局部变量有什么区别?【面试题】

```java
1 定义的位置不同:
    成员变量:定义在类体里面 方法体外面
    局部变量:定义在方法体里面

2 作用范围不同:
    成员变量:也叫属性 表示对象有什么 依赖于对象而存在
            当我们new对象的时候 属性随着也会创建
            当对象消亡的时候 属性也会消亡
    局部变量:从定义的那一行开始 一直到所在的方法结束之前可以访问 
            局部变量依赖于方法而存在
            一旦所在的方法体执行结束 局部变量消亡                 

3 默认值不同:
    成员变量:即使不赋值也有默认值 默认值是什么 看数据类型
    局部变量:没有默认值 要求使用之前必须赋值!!!
```

3 成员变量和局部变量可以重名 

```java
* : 成员变量和局部变量可以重名 
    如果成员变量和局部变量重名的话 直接访问该变量 默认是局部变量
    如果成员变量和局部变量重名的话 想要访问成员 需要在变量的前面加 上 this.
    this : 表示当前方法的调用者
```

下面是局部变量和成员变量重名时,优先获得局部变量,使用成员变量需要this

public class TestArgs2 {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.name = "zs";
		stu.age = 18;
		stu.show();
	}
}
class Student {
	String name;// zs
	int age;// 18

	public void show() {
		//					zs			18
		System.out.println(name + " " + age);// 此时没有重名现象
		String name = "zss";// 局部变量 - zss
		System.out.println(this.name);// zs
		//		重名了
		System.out.println(name);// zss
	}
}

局部变量使用之前要赋值 不然报错 

public class TestArgs1{
	// 成员变量-属性 name age
	// 局部变量-方法体 stu
	public static void main(String[] args){
		Student stu = new Student();
		stu.name = "坤坤";
		stu.study("平平");
		stu.show();
		stu.test();
	}
}
class Student{
	String name;// 坤坤
	int age;
	double salary;
	boolean flag;
	// this =》 属性
	public void study(String name){// 平平
		// XXX和XXX一起学习
		// 前提:重名了
		// 直接获取 - 局部变量【就近原则】
		// 获取属性 - 必须加 this.
		System.out.println(this.name+"和"+name+"一起学习");
	}

	public void show(){
		System.out.println(name);//
		// System.out.println(hour);此时hour没有创建 报错:找不到符号
		// int hour = 0;// 局部变量没有默认值
		int hour;// 创建了
		hour = 0;
		System.out.println(hour);
	}// hour自动消亡
	public void test(){
		System.out.println(name);
		// System.out.println(hour);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值