java----Java基本组成

Java基本组成
一、关键字的定义和特点
疑问神马是关键字?
定义:被Java语言赋予了特殊含义单词
特点:关键字中所有字母小写
用于定义数据类型的关键字
class,interface,byte,short,int,long,float,double,char,boolean,void
用于定义数据类型值的关键字
true,false,null
用于定义流程控制的关键字
if,else,swith,case,default,while,do,for,break,countinue,return
用于定义访问权限修饰符的关键字
private,protected,public
用于定义类、函数、变量修饰符的关键字
abstract,final,static,synchronized
用于定义类之间关系的关键字
extends,implements
用于定义建立实例及引用实例,判断实例的关键字
new,this,super,instanceof
用于异常处理的关键字
try,catch,finally,throw,throws
用于包的关键字
package,import
其他修饰符关键字
native,strictip,transient,voiatile,assert
二、标示符
疑问神马是标示符?
1、在程序中定义的一些名称。
2、由26英文字母大小写数字0-9和符号"_","$"组成。
定义合法标示符规则:
1、数字不可以开头
2、不可以使用关键字
*注:在Java中严格区分大小写。在起名字的时候,为了提高阅读性,要尽量有意义。
Java中的名称规范:
包名:多单词组成时,所以字母都小写。
如:xxxyyyzzz。
类名接口名:多单词组成时,所有单词的首字母大写。
如:XxxYyyZzz。
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
如:xxxYyyZzz。
常量名:所有字母都大写。多单词组成时每个单词用下划线连接。
如:XXX_YYY_ZZZ。
三、常量与变量
疑问神马是常量?
常量:常量表示不能改变的数值。
Java中常量的分类:
1、整数常量,所有整数。
2、小数常量,所有小数。
3、布尔型常量,较为特别,只有两个数值:true、false。
4、字符常量,将一个数字,字母或者符号用单引号' '标识。
5、字符串常量,将一个或者多个字符用双引号" "标识。
6、null常量,只有一个数值——null
对于整数,Java有三种表现形式:
十进制:0-9,满10进1。
八进制:0-7,满8进1,用0开头表示
十六进制:0-9,A-F,满16进1,用0x开头表示。
二进制与十进制之间的转换
十转二原理:对十进制进行除2运算。
如十进制6转二进制运算方法:

在程序中可以用Integer.toBinaryString(6);获得参数所对应的二进制。
二转十原理:二进制乘以2的过程。
如二进制110转十进制运算方法:

运算技巧:记住相应位的数值

把有1的位置下的数进行相加,128+32+16+4+1=181,所以对应的十进制为181。
八进制十六进制十进制互转也是同样道理。
二转八技巧:
三个二进制位就是一个八进制数

从后往前取三位,最后没满三位的在前面添“0”,然后计算二进制的十进制值,如图:132就是这个二进制的八进制表现形式。
二转十六技巧:
四个二进制位就是一个十六进制数

从后往前取四位,最后没满三位的在前面添“0”然后计算二进制的十进制值,如图:5A就是这个二进制的十六进制表现形式。
负数的二进制表现形式:对应正数的二进制取反加1。
四、变量的概念
疑问神马是变量?
1、内存的一个存储区域。
2、该区域有自己的名称(变量名)和类型(数据类型)。
3,、该区域的数据可以在同一类型范围内不断变化。
简单的说就是:变量就是将不确定的数据进行存储,需要在内存中开辟一个空间。
疑问为神马要定义变量?
用来不断的存放同一类型的常量,并可以重复使用。
注:变量作用范围(一对“{}”之间有效),需要初始化值
定义变量的格式: 数据类型  变量名   = 初始化值;
疑问如何开辟空间的?
class Demo
{
	public static void main(String []args){
		//为变量a开辟空间,然后赋值为6
		int a = 6;
		System.out.println(a);
		//将变量a的值6覆盖为7
		a = 7;
		System.out.println(a);
	}
}
图解:

Java知识补充:Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
数据类型图示:

Java中整数默认:int,小数默认:double
byte:1个8位(8个二进制位)表示。范围:-2^7~2^7-1
short:2个8位(16个二进制位)表示。范围:-2^15~2^15-1
int:4个8位(32个二进制位)表示。范围:-2^31~2^31-1
char:范围0~65535。
boolean:仅只有两个值true,false。
long:天文数字。
感受变量:
class Demo
{
	public static void main(String []args){
		byte b = 2;//-128~127
		//byte b1 = 128;容易丢失精度
		short s = 3000;//-32768~32767
		long l = 41;
		float f = 2.3f;
		double d = 34.56;
		char ch = '4';
		char ch1 = 'a';
		char ch2 = '+';
		char ch3 = '';
		boolean bo = true;
		boolean bo1 = false;
	}
}
疑问神马时候定义变量?
数据不确定时需要对数据存储时,就定义一个变量来完成存储动作。
int a = 5;
a = a+6;//在原来变量a的基础上再加6,然后结果再赋值给变量a
五、类型转换
class Demo
{
	public static void main(String []args){
		byte b = 3;
		b = b+2;
		System.out.println(b);
	}
}
编译不通过
原因:因为byte类型是占1个8位int类型占4个8位,b变量会自动类型提升(低向高提升)为int,然后又赋值给byte类型的b,这样是不允许的。所以编译不通过。
解决办法
class Demo
{
	public static void main(String []args){
		byte b = 3;
		b = (byte)(b+2);
		System.out.println(b);
	}
}

b = (byte)(b+2); 这样的操作称为:强制类型转换
class Demo
{
	public static void main(String []args){
		System.out.println('a'+1);
	}
}
“'a'+1”在操作时‘a’是char类型, 占2个8位。1是整型, 占4个8位。这时后‘a’会自动提升为int,系统会去找‘a’的ASCLL码值97,然后进行加1运算,所以会输出99。

六、运算符
算术运算符:
+正号
-负
+加法运算符
-减法运算符
*乘法运算符
/除法运算符
%取模运算符
++自增(前)
++自增(后)
--自减(前)
--自减(后)
+字符串相加
class Demo
{
	public static void main(String []args){
		int x = 4270;
		x = x/1000*1000;
		System.out.println(x);
	}
}

原因:x/1000时,因为左右两边位整型,所以结果也是整形,结果为4,而不是4.27,然后再与1000进行相乘。所以显示4000。
class Demo
{
	public static void main(String []args){
		System.out.println(10%4);
	}
}

10对4进行 取模运算,也就是 求余运算
取模运算技巧(面试):若左边小于右边,结果是左边;若左边等于右边,结果是0;右边是1,结果是0;负数只看被模数(左边)。
class Demo
{
	public static void main(String []args){
		int a =3,b;
		b = a++;
		System.out.println("a="+a);
		System.out.println("b="+b);
		System.out.println("a="+a+",b="+b);
	}
}

b=a++; 意义:先把a赋值给b,然后a自增后再把值赋给a。
System.out.println("a="+a+",b="+b);意义:字符串数据和任何数据使用,都是相连接,最终都会变成字符串。
class Demo
{
	public static void main(String []args){
		System.out.println("5+5="+5+5);
	}
}

七、转义字符
疑问神马是转义字符?
通过" "来转义后面字母或者符号的含义。
class Demo
{
	public static void main(String []args){
		System.out.println("hello \n world");
	}
}

n被加了" \ "具有了特殊含义,DOS下识别为换行。
Windows下的换行为:" \r\n "
Linux下的换行为:" \n "
DOS下的换行为:" \n "
" \b "代表退格,相当于“backspace”。
" \r "代表按回车,相当于“Enter”
" \t "代表制表符,相当与“tab”。
class Demo
{
	public static void main(String []args){
		char c = '你';
		System.out.println(c);
	}
}

char类型中存入中文字是允许的。
八、赋值运算符
= 将右边的值赋值给左边
+= 将左右两边的和赋值给左边
-= 将左右两边的差赋值给左边
*= 将左右两边的积赋值给左边
/= 将左右两边的商赋值给左边
class Demo
{
	public static void main(String []args){
		short s = 4;
		s+=5;
		System.out.println(s);
	}
}

s+=5没有报错的原因:因为+=是赋值运算,也就是一步完成,它不同于s = s+5;是两步运算,先将s+5,注意这个时候s会自动类型提升,然后再给s。所以+=是可以通过的。
九、比较运算符
== 判断是否相等
!= 判断是否不等
< 判断是否小于
> 判断是否大于
<= 判断是否小于或等于
>= 判断是否大于或等于
instanceof 判断类型是否相同
十、逻辑运算符
疑问神马是逻辑运算符?
逻辑运算符用于连接boolean类型的表达式
& 与运算
| 或运算
^ 异或运算
! 非运算
&& AND(短路)
|| OR(开路)
t&t=t
t&f=f
f&t=f
f&f=f
&特点:只要两边boolean表达式结果有一个为false,那么结果为false。只有两边都为true,结果才为true。
t|t=t
t|f=t
f|t=t
f|f=f
|特点:两边只要有一个为true,结果为true,只有两边都为false,结果才为false。
t^t=f
t^f=t
f^t=t
f^f=f
^特点:两边相同结果是false,两边不同则是true。
!t=f
!f=t
!特点:非假为真,非真为假。
class Demo
{
	public static void main(String []args){
		int a = 2;
		System.out.println(a>3&a<6);
		System.out.println(a>3&&a<6);
	}
}

&&&两者虽然在结果上相同,可是两者在特定情况下的判断过程不同,&会判断左右两边的值,&&先判断左边,如果左边为false,则不会再判断右边了。提高了效率。 | || ,|两边都判断,||先判断左边,如果左边为true,则不会再判断右边,提高了效率。
十一、位运算
<< 左移
>> 右移
>>> 无符号右移
& 与运算
| 或运算
^ 异或运算,特点与应用:一个数异或同一个数两次,结果还是那个数,可应用于加密。
~ 反码
3 << 2 = 12
6 >> 2 = 1
<<:其实就是乘以2的移动的位数次幂。
>>:其实就是除以2的移动的位数次幂。最高位补什么由元数据最高位决定,如果最高位是0,右移后用0补空位。如果最高位是1,右移后用1补空位。
>>>:无论最高位是什么,右移后,都用0补。
位运算练习
1、最高效的方式算出2乘以8等于几。
2、对两个整数变量的值进行互换(不需要第三方变量)。
class Test1
{
	public static void main(String []args){
		System.out.println(2<<3);
	}
}

class Test2
{
	public static void main(String []args){
		int n = 3,m = 8;
		System.out.println("n="+n+",m="+m);

		//方法1,利用第三方变量,这种方法一般用于开发。本题不能用第三方变量
		/*
		int temp;
		temp = n;
		n = m;
		m = temp;
		*/

		//方法2,利用和差求取,具有局限性:当n和m的值非常大,就容易超出范围。
		/*
		n = n+m;
		m = n-m;
		n = n-m;
		*/

		//方法3,利用异或的特点,一个数异或同一个数两次,结果还是那个数。作为技巧
		n = n^m;
		m = n^m;
		n = n^m;

		System.out.println("n="+n+",m="+m);
	}
}
十二、程序流程控制
顺序结构
System.out.println(1);
System.out.println(2);
System.out.println(3);
判断结构
1
if(条件表达式)
{
	执行语句;
}
2
if(条件表达式)
{
	执行语句;
}
else
{
	执行语句;
}
3
if(条件表达式)
{
	执行语句;
}
else if
{
	执行语句;
}
	.
	.
	.
else()
{
	执行语句;
}
三元运算符
class Demo
{
	public static void main(String []args){
		int a = 9,b;
		b = (a>1)?100:200;
		System.out.println(b);
	}
}
三元运算符好处:作为if else的简写格式,可以简化代码。 弊端:以为是一个运算符,所以运算符必须要有一个结果。
if练习
需求1:根据用户定义的数值不同,打印对应的星期数。
class Demo
{
	public static void main(String []args){
		int num = 4;
		if(num==1)
			System.out.println("星期一");
		else if(num==2)
			System.out.println("星期二");
		else if(num==3)
			System.out.println("星期三");
		else if(num==4)
			System.out.println("星期四");
		else if(num==5)
			System.out.println("星期五");
		else if(num==6)
			System.out.println("星期六");
		else if(num==7)
			System.out.println("星期天");
	}
}
需求2:根据用户指定月份,打印该月份所属的季节。
class Demo
{
	public static void main(String []args){
		int x = 4;
		if(x>12||x<1){
			System.out.println("不存在");
		}
		else if(x>=3&&x<=5){
			System.out.println("春季");
		}
		else if(x>=6&&x<=8){
			System.out.println("夏季");
		}
		else if(x>=9&&x<=11){
			System.out.println("秋季");
		}
		else{
			System.out.println("冬季");
		}
	}
}
十三、选择结构
switch语句:
格式:
switch(表达式)
{
	case 取值1:
		执行语句;
		break;
	case 取值2:
		执行语句;
		break;
	.
	.
	.
	default:
		执行语句;
}
需求:根据用户指定月份,打印该月份所属的季节。
class Demo
{
	public static void main(String []args){
		int x = 3;
		switch(x){
			case 3:;
			case 4:;
			case 5:
				System.out.println(x+"春季");
				break;
			case 6:;
			case 7:;
			case 8:
				System.out.println(x+"夏季");
				break;
			case 9:;
			case 10:;
			case 11:
				System.out.println(x+"秋季");
				break;
			case 12:;
			case 1:;
			case 2:
				System.out.println(x+"冬季");
				break;
                        default:
                                System.out.println("nono");
		}
	}
}
if和switch语句很像
疑问具体什么场景下应用哪个语句呢?
如果判断的具体数值不多,而且符合byte,short,int,char这四种类型,虽然两个语句都可以使用,建议使用switch语句,因为效率较高。对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值