------- android培训、java培训、期待与您交流! ----------
一、Java语言基础组成
【关键字、标示符、注释、常量和变量、运算符、语句、函数和数组】
1、关键字
2、标识符
定义:在程序中自定义的一些名称,由26个英文字母大小写、0-9的数字和_$符号组成。
规则:(1)数字不可以开头 (2)不可以使用关键字 (3)要严格区分大小写 (4)为提高阅读性,尽量起有意义的名字
Java中的名称规范:
(1)包名:多单词组成时所有字母都小写 xxxyyyzzz
(2)类名接口名:多单词组成时,所有单词的首字母大写 XxxYyyZzz
(3)变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。 xxxYyyZzz
(4)常量名:所有字母都大写,多单词时每个单词用下划线连接。 XXX_YYY_ZZZ
3、注释
定义:用于注解说明解释程序的文字就是注释
作用:提高了代码的阅读性
格式:(1)单行注释 //注释文字 (2)多行注释 /*注释文字*/ (3)文档注释 /**注释文字*/
备注:
(1)单行和多行注释的文字不会被JVM解释运行
(2)文档注释的内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
(3)代码仅仅是思想的一种体现形式
范例如下:
/**
这是我的Hello World程序
@author 小明
*/
class Demo
{
/*
这是主函数,是程序的入口,它的出现可以保证程序的独立运行
*/
public static void main(String[] args)
{
//这是输出语句,用于将括号内的数据打印到控制台
System.out.println(“Hello World”);
}
}
4、常量
定义:常量表示不能改变的数值
分类:
(1) 整数常量:所有整数
(2) 小数常量:所有小数
(3) 布尔型常量:true false
(4) 字符常量:将一个数字字母或者符号用单引号(‘’)标识 ,单引号里只能放一个字符‘4’‘+’‘a’。 ‘ab’错误
(5) 字符串常量:将一个或者多个字符用双引号标识如“ab”“”
(6) null常量:只有一个数值就是null
5、进制
八进制是二进制的三位表示一位演变过来的。
进制越大表现形式越短。
十进制——>二进制 原理:对十进制进行除2运算
二进制——>十进制 原理:二进制乘以2的过程
负数的二进制表现形式: 原理:就是其正数的二进制取反加1 (取反:就是将二进制的1变成0,0变成1)
备注:负数的二进制位的最高位是1,正数的二进制位的最高位是0。
6、变量
(1)定义:内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。
(2)作用:用来不断的存放同一类型的常量,并可以重复使用
(3)注意事项:<1>变量的作用范围,在{}之间有效 <3>初始化值
(4)格式:数据类型 变量名 = 初始化值
备注:格式是固定的,记住格式,以不变应万变。
(5)什么时候定义变量?当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作。
自动类型提升和强制转换
7、运算符【算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和三元运算符】
(1) a++ 相当于 a = a+1;
b = a++ 运算过程 先把a的值赋给b,然后a再自增+1
b = ++a 运算过程 a先+1,然后赋值给b
(2)字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
System.out.println(“hahfhah”+”hahfahha”);
System.out.println(“5+5=”+5+5); 结果:“5+5=55”
System.out.println(a+”,”+b); 代表分别打印a和b的值
System.out.println("a="+a+",b="+b); 更清晰
(3)转义字符:通过\来转变后面字母或者符号的含义
<1> \n换行
<2> \t制表符,相当于Tab
<3> \b退格,相当于Backspace
<4> \r按下回车键 window系统中,回车符是由\r\n两个字符来表示
备注:【转义字符要写在被转义的前面】
System.out.println("\"hello\""); 结果"hello" System.out.println("\\hello\\"); 结果\hello\ char = '\n';可以
char里面能不能放中文? 如 char = ‘你’; 答:可以。一个中文是两个字节,char类型也是两个字节
8、
(1) x+=4 相当于 x = x+4;
(2) 面试: 已知 short s = 4; 为什么 s = s + 5;不可以 s+=5;就可以
答:s = s + 5;是两次运算,先做右边的加法,再赋值给左面。 而s+=5就是做一次赋值运算,
实现把左右两面的和赋给左面。
两者的最大不同是s+=5会做一个自动转换动作,而s = s + 5不会做。
简单说就是:s = s + 5编译失败,s+=5编译通过。
补充:s+5运算完是int值,再赋给s装不下,容易丢失精度。 s+=5只做赋值运费,它内部有一个自动转换动作。
(3)特殊赋值 int a,b,c a = b = c = 5;
9、
10、
(1)&:只要两边的boolean表达式结果,有一个为false,结果就是false.
只有两边都为true,结果才为true。
(2)|:两边只要有一个为true,结果为true。
只有两边都为false,结果为false。
(3)^: 两边相同,结果是false.
两边不同,结果是true.
(4)&和&&的区别:&无论左边是true还是false,右边都运算;&&当左边为false时,右边不运算。
(5)|和||的区别:|两边都参与运算,||当左边为true,右边不运算。
11、
(1)<<:就是乘以2的移动的次数次幂
>>:就是除以2的移动的次数次幂
(2)>>:最高位补什么,由原有数据的最高位值而定。如最高位是0,右移后,用0补空位。如最高位是1,右移后,用1补空位。
>>>:无论最高位是什么,右移后,都用0补。
(3)一个数异或同一个数两次,结果还是那个数。 7 ^ 4 ^ 4 = 7
(4)问:最有效率的方式算出2乘以8等于几? 答:2<<3;
(4)问:对两个整数变量的值进行互换(不需要第三方变量)
答:<1>通过第三方变量 (常用) <2> (不推荐) <3>(技巧性)
int temp; n = n+m;//如果n和m的值非常大,容易超出int范围,损失精度。 n = n ^ m;
temp = n; m = n-m; m= n ^ m; //(n ^ m) ^m
n = m; n = n-m; n = n ^ m;// n ^ (n ^ m)
m = temp;
(5)System.out.println(Integer.toBinaryString(60)); 求60的二进制
(6)
class OperatorDemo
{
public static void main(String[] args)
{
int num = 60;
//获取60的最低4位,通过 & 15;
int n1 = num & 15;
System.out.println((char)(n1-10+'A'));
//要获取下一组4位,将60右移4位。
int temp = 60 >>> 4;
//对temp的值进行最低4位的获取
int n2 = temp & 15;
System.out.println(n2);
/*
0-9 'A' 'B' 'C' 'D' 'E' 'F'
65 66 67
10 11 12 13 14 15
12 - 10 = 2 + 'A' = (char)67;
*/
}
}
结果是:3C
12、
13、
(1)判断结构
备注:<1>如果if控制的语句只有一条,可以不加{};如果有多条,而不加{}那么它就控制最近的一条。
<2>if else结构简写形式:变量 =(条件表达式)?表达式1:表达式2;
好处:可以简化if else代码
弊端:因为是一个运算符,所以运算完必须要有一个结果。
练习:
<1>
int n =3;
if(n>1)
System.out.println("a");
else if(n>2)
System.out.println("b");
else if(n>3)
System.out.println("c");
else
System.out.println("d");
结果是:a
if(n>1)
System.out.println("a");
if(n>2)
System.out.println("b");
if(n>3)
System.out.println("c");
else
System.out.println("d");
System.out.println("over");
结果是:a b d over
<2>
class IfTest
{
public static void main(String[] args)
{
//需求1:根据用户定义的数值不同,打印对应的星期英文
int num = 2;
if(num==1)
System.out.println("monday");
else if(num==2)
System.out.println("tsd");
else
System.out.println("nono");
//需求2:根据用户指定的月份,打印该月份所属的季节
//3,4,5春季6,7,8夏季9,,10,11秋季12,1,2冬季
int x =4;
if(x==3 || x==4 || x==5)
System.out.println(x+"春季");
else if(x==6 || x==7 || x==8)
System.out.println(x+"夏季");
else if(x==9 || x==10 || x==11)
System.out.println(x+"秋季");
else if(x==12 || x==1 || x==2)
System.out.println(x+"冬季");
else
System.out.println(x+"月份不存在");
if(x>12 || x<1)
System.out.println(x+"月份不存在");
else if(x>=3 && x<=5)
System.out.println(x+"春季");
else if(x>=6 && x<=8)
System.out.println(x+"夏季");
else if(x>=9 && x<=11)
System.out.println(x+"秋季");
else
System.out.println(x+"冬季");
}
}
(2)选择结构
练习:
//需求:根据用户指定的月份,打印该月份所属的季节
//3,4,5春季6,7,8夏季9,,10,11秋季12,1,2冬季
class SwitchDemo
{
public static void main(String[] args)
{
int x =1;
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(x+"月份不存在");
}
}
}
备注:
if 和 switch 区别:
if 能判断区间,switch不方便; if能判断布尔型,switch不行;
如果判断的具体数值不多,且能符合 byte short int char这四种类型,建议用switch。(JDK1.7中switch也可判断字符串)
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。