完整版最全的java学习笔记必看Word下载.docx
《完整版最全的java学习笔记必看Word下载.docx》由会员分享,可在线阅读,更多相关《完整版最全的java学习笔记必看Word下载.docx(88页珍藏版)》请在冰豆网上搜索。
c:
\;
d:
(先找classpath,若无,再找当前路径)
vC、D两盘有同名.class文件,classpath设置为D盘,而命令行窗口当前盘符为C盘,则JVM现找classpath路径,后找当前路径。
B.Linux:
在控制台执行
①设置CLASSPATH环境变量,指向package所在的目录,一般是项目文件夹中的bin目录。
②执行javapackage.ClassName(包名必须写)。
exportCLASSPATH=/home/soft01/workspace/1304/bin(临时环境配置)
javaday01.HelloWorld
java-cp/home/soft01/workspace/1304/binday01.HelloWorld(二合一)
vWindows根目录是反斜线:
\
vLinux根目录是斜线:
/
1.5Linux命令与相关知识
1)Linux无盘符,只有一个根目录(root)
2)终端==控制台==命令行窗口
3)pwd:
打印当前工作目录,显示当前工作目录的位置
4)ls:
列表显示目录内容,默认显示当前目录内容
5)cd:
改变当前工作目录;
cd后不加参数=返回home文件夹;
cd~:
返回home;
cd/:
切换到根目录;
cd..:
返回上一层目录(相对的);
6)mkdir:
创建文件夹(目录)注意:
目录==文件夹
7)rm:
删除文件;
rmxxxx:
可删多个文件;
rm–rfxx:
-为减号,r表递归,f表强制
8)catxx:
显示文本文件内容
9)启动Java开发工具:
cd/opt/eclipse./eclipse.表当前目录下
10)绝对路径:
/home(以/开始为绝对路径,相对于根目录)
相对路径:
home(相对于当前工作目录)
11)home(用户主目录,用户的家):
/home/username如:
/home/soft01
12)主目录(home):
有最大访问权限:
什么都能干,增删改查、建目录等
其他地方:
一般只能查看,不能增删改查、创建目录等
1.6Eclipse/Myeclipse程序结构
Project项目文件
|--src源文件
||--Package包
||--.java源文件
|--bin
|--Package包
|--.class字节码程序
vMyeclipse5.5消耗少,Myeclipse6.5最稳定
Java语言基础
2.1基础语言要素
1)标识符:
给类、方法、变量起的名字
A.必须以字母或下划线或$符号开始,其余字符可以是字母、数字、$符号和下划线。
B.只能包含两个特殊字符,即下划线_和美元符号$。
不允许有任何其他特殊字符。
C.标识符不能包含空格。
D.区分大小写。
2)关键字:
只有系统才能用的标识符
vtrue、false、null不是关键字!
是字面量。
vmain不是关键字!
但是是一个特殊单词,可以被JVM识别,主函数是固定格式,作为程序的入口。
3)注释:
单行注释:
//多行注释:
/*……*/文档注释:
/**……*/
开发中类前、属性前、方法前,必须有文档注视。
2.2八种基本数据类型
1)四种整数类型(byte、short、int、long):
byte:
8位,用于表示最小数据单位,如文件中数据,-128~127
short:
16位,很少用,-32768~32767
int:
32位、最常用,-2^31-1~2^31(21亿)
long:
64位、次常用
vinti=5;
//5叫直接量(或字面量),即直接写出的常数。
v整数字面量默认都为int类型,所以在定义的long型数据后面加L或l。
v小于32位数的变量,都按int结果计算。
v强转符比数学运算符优先级高。
见常量与变量中的例子。
2)两种浮点数类型(float、double):
float:
32位,后缀F或f,1位符号位,8位指数,23位有效尾数。
double:
64位,最常用,后缀D或d,1位符号位,11位指数,52位有效尾数。
v二进制浮点数:
1010100010=101010001.0*2=10101000.10*2^10(2次方)=1010100.010*2^11(3次方)=.1010100010*2^1010(10次方)
v尾数:
.1010100010指数:
1010基数:
2
v浮点数字面量默认都为double类型,所以在定义的float型数据后面加F或f;
double类型可不写后缀,但在小数计算中一定要写D或X.X。
vfloat的精度没有long高,有效位数(尾数)短。
vfloat的范围大于long指数可以很大。
v浮点数是不精确的,不能对浮点数进行精确比较。
3)一种字符类型(char):
char:
16位,是整数类型,用单引号括起来的1个字符(可以是一个中文字符),使用Unicode码代表字符,0~2^16-1(65535)。
v不能为0个字符。
v转义字符:
\n换行\r回车\tTab字符\"
双引号\\表示一个\
v两字符char中间用“+”连接,内部先把字符转成int类型,再进行加法运算,char本质就是个数!
二进制的,显示的时候,经过“处理”显示为字符。
4)一种布尔类型(boolean):
true真和false假。
5)类型转换:
char-->
自动转换:
byte-->
short-->
int-->
long-->
float-->
double
强制转换:
①会损失精度,产生误差,小数点以后的数字全部舍弃。
②容易超过取值范围。
2.3常量和变量
变量:
内存中一块存储空间,可保存当前数据。
在程序运行过程中,其值是可以改变的量。
1)必须声明并且初始化以后使用(在同一个作用域中不能重复声明变量)!
2)变量必须有明确类型(Java是强类型语言)。
3)变量有作用域(变量在声明的地方开始,到块{}结束)。
变量作用域越小越好。
4)局部变量在使用前一定要初始化!
成员变量在对象被创建后有默认值,可直接用。
5)在方法中定义的局部变量在该方法被加载时创建。
常量:
在程序运行过程中,其值不可以改变的量。
v字面量、常量和变量的运算机制不同,字面量、常量由编译器计算,变量由运算器处理,目的是为了提高效率。
eg:
小于32位数的字面量处理
byteb1=1;
byteb2=3;
//byteb3=b1+b2;
//编译错误,按照int结果,需要强制转换
byteb3=(byte)(b1+b2);
//byteb3=(byte)b1+(byte)b2;
//编译错误!
两个byte、short、char相加还是按int算
System.out.println(b3);
//选择结果:
A编译错误B运行异常C4Db3
byteb4=1+3;
//字面量运算,编译期间替换为4,字面量4
//byteb4=4;
不超过byte就可以赋值
v不管是常量还是变量,必须先定义,才能够使用。
即先在内存中开辟存储空间,才能够往里面放入数据。
v不管是常量还是变量,其存储空间是有数据类型的差别的,即有些变量的存储空间用于存储整数,有些变量的存储空间用于存储小数。
2.4运算符与表达式
1)数学运算:
+-*/%++--
v+-*/两端的变量必须是同种类型,并返回同种类型。
v%取余运算,负数的余数符号与被模数符号相同,-1%5=-1,1%-5=1;
Num%n,n>
0,结果范围[0,n),是周期函数。
v注意整除问题:
1/2=0(整数的除法是整除)1.0/2=0.51D/2=0.5
v单独的前、后自增或自减是没区别的,有了赋值语句或返回值,则值不同!
eg1:
自增自减
inta=1;
a=a++;
System.out.println("
a的值:
"
+a);
第1步:
后++,先确定表达式a++的值(当前a的值)a++---->
1
第2步:
++,给a加1a---->
第3步:
最后赋值运算,把a++整个表达式的值赋值给aa---->
1
a被赋值两次,第1次a=2,第2次把1赋值给1
eg2:
x,y,z分别为5,6,7计算z+=--y*z++;
//x=5,y=5,z=42
z=z+--y*z++42=7+5*7从左到右入栈,入的是值
eg3:
取出数字的每一位
d=num%10;
//获取num的最后一位数num/=10;
//消除num的最后一位
2)位运算:
&
|~(取反)^(异或)>
>
<
<
>
v一个数异或同一个数两次,结果还是那个数。
v|:
上下对齐,有1个1则为1;
:
上下对齐,有1个0则为0;
(都为二进制)
v&
相当于乘法,|相当于加法;
有0则为0,|:
有1则为1,^:
两数相同为0,不同为1。
3)关系运算符:
=<
===!
=
4)逻辑运算符:
||(短路)!
&
|
短路运算:
前为flase,则后面不计算;
||:
前为true,则后面不计算
intx=1,y=1,z=1;
if(x--==1&
y++==1||z++==1)//||短路运算后面的不执行了!
System.out.println(“x=”+x+”,y=”+y+”,z=”+z);
//0,2,1
5)赋值运算符:
=+=-=*=/=%=
正负1交替
intflag=-1;
System.out.println(flag*=-1);
……
6)条件(三目)运算符:
表达式1?
表达式2:
表达式3
v右结合性:
a>
b?
a:
i>
j?
i:
j相当于a>
(i>
j)
v三目运算符中:
第二个表达式和第三个表达式中如果都为基本数据类型,整个表达式的运算结果由容量高的决定。
intx=4;
x>
4?
99.9:
9;
99.9是double类型,而9是int类型,double容量高,所以最后结果为9.9。
7)运算符优先级:
括号>
自增自减>
~!
>
算数运算符>
位移运算>
关系运算>
逻辑运算>
条件运算>
赋值运算
2.5编程风格
MyEclipse/Eclipse中出现的红色叉叉:
编译错误
编译错误:
java编译器在将Java源代码编译为class文件的过程出现的错误,一般是语法使用错误!
当有编译错误时候,是没有class文件产生,也就不能运行程序。
Java程序结构:
2.6流程控制语句
1)选择控制语句
if语句:
if、if-else、if-else-if:
可以处理一切分支判断。
格式:
if(判断){…}、if(判断){…}else{…}、if(判断){…}elseif(判断){…}
switch语句:
switch(必须整数类型){case常量1:
…;
case常量2:
…;
….}
vint类型指:
byte、short、int,只能写long类型,要写也必须强转成int类型;
而byte、short为自动转换成int。
vswtich-case:
若case中无符合的数,并且default写在最前(无break时),则为顺序执行,有break或}则退出。
若case中无符合的数,并且default写在最后,则执行default。
若case中有符合的数,并且default写在最后,并且default前面的case没有break时,default也会执行。
2)循环控制语句
①for:
最常用,用在与次数有关的循环处理,甚至只用for可以解决任何循环问题。
for中定义的用于控制次数的循环变量,只在for中有效,for结束则循环变量被释放(回收)。
②while:
很常用,用在循环时候要先检查循环条件再处理循环体,用在与次数无关的情况。
如果不能明确结束条件的时候,先使用while(true),在适当条件使用if语句加break结束循环。
③do-while:
在循环最后判断是否结束的循环。
使用while(true)实现循环的时候,结束条件break在while循环体的最后,就可以使用do-while。
do-while的结束条件经常是“否定逻辑条件”,不便于思考业务逻辑,使用的时候需要注意。
可以利用while(true)+break替换。
④循环三要素:
A.循环变量初值B.循环条件C.循环变量增量(是循环趋于结束的表达式)
⑤for和while循环体中仅一条语句,也要补全{},当有多条语句,且不写{}时,它们只执行紧跟着的第一条语句。
⑥循环的替换:
while(布尔表达式){}等价for(;
布尔表达式;
){}
while(true){}等价for(;
;
)
while(true){}+break替换do{}while(布尔表达式);
for(;
)+break替换do{}while(布尔表达式);
3)跳转控制语句
continue:
退出本次循环,直接执行下一次循环
break:
退出所有循环
2.7数组
类型一致的一组数据,相当于集合概念,在软件中解决一组,一堆XX数据时候使用数组。
1)数组变量:
是引用类型变量(不是基本变量)引用变量通过数组的内存地址位置引用了一个数组(数组对象),即栓到数组对象的绳子。
数组变量的赋值
int[]ary=newint[3];
//ary----->
{0,0,0}<
----ary1
int[]ary1=ary;
//ary的地址赋值给ary1,ary与ary1绑定了同一个数组
//ary[1]与ary1[1]是同一个元素,数组变量不是数组(数组对象)
2)数组(数组对象)有3种创建(初始化)方式:
①newint[10000]给元素数量,适合不知道具体元素,或元素数量较多时②newint[]{3,4,5}不需要给出数量,直接初始化具体元素适合知道数组的元素。
③{2,3,4}静态初始化,是②简化版,只能用在声明数组变量的时候直接初始化,不能用于赋值等情况。
数组初始化
int[]ary1=newint[]{2,3,4};
//创建数组时候直接初始化元素
int[]ary2={2,3,4};
//数组静态初始化,只能在声明变量的同时直接赋值
//ary2={4,5,6};
//编译错误,不能用于赋值等情况
ary2=newint[]{4,5,6};
3)数组元素的访问:
①数组长度:
长度使用属性访问,ary.length获取数组下标。
②数组下标:
范围:
0~length-1就是[0,length),超范围访问会出现下标越界异常。
③使用[index]访问数组元素:
ary[2]。
④迭代(遍历):
就是将数组元素逐一处理一遍的方法。
4)数组默认初始化值:
根据数组类型的不同,默认初始化值为:
0(整数)、0.0(浮点数)、false(布尔类型)、\u0000(char字符类型,显示无效果,相当于空格,编码为0的字符,是控制字符,强转为int时显示0)、null(string类型,什么都没有,空值的意思)。
5)数组的复制:
数组变量的赋值,是并不会复制数组对象,是两个变量引用了同一个数组对象。
数组复制的本质是创建了新数组,将原数组的内容复制过来。
6)数组的扩容:
创建新数组,新数组容量大于原数组,将原数组内容复制到新数组,并且丢弃原数组,简单说:
就是更换更大的数组对象。
System.arraycopy()用于复制数组内容,简化版的数组复制方法:
Arrays.copyOf()方法,但需JKD1.5+。
2.8字符串
字符串(string):
永远用“”双引号(英文状态下),用字符串连接任何数据(整数),都会默认的转化为字符串类型。
字符串与基本数据类型链接的问题:
如果第一个是字符串那么后续就都按字符串处理,如System.out.println("
(Result)"
+6+6);
那么结果就是(Result)66,如果第一个和第二个…第n个都是基本数据,第n+1是字符串类型,那么前n个都按加法计算出结果在与字符串连接。
如下例中的System.out.println(1+2+”java”+3+4);
结果为3java34。
字符串前后的“+”都是连接符!
不是加法运算符!
System.out.println("
A"
+'
B'
);
//AB
System.out.println('
A'
//131
System.out.println(1+2+”java”+3+4);
//3java34
比较字符串是否相等必须使用equals方法!
不能使用==。
1"
.equals(cmd)比cmd.equals("
)要好。
2.9方法三要素
方法:
method(函数function=功能)y=f(x)
1)方法的主要三要素:
方法名、参数列表、返回值。
2)什么是方法:
一个算法逻辑功能的封装,是一般完成一个业务功能,如:
登录系统,创建联系人,简单说:
方法是动作,是动词。
3)方法名:
一般按照方法实现的功能定名,一般使用动词定义,一般使用小写字母开头,第二个单词开始,单词首字母大写。
createContact()。
4)参数列表:
是方法的前提条件,是方法执行依据,是数据。
login(Stringid,Stringpwd),参数的传递看定义的类型及顺序,不看参数名。
5)方法返回值:
功能执行的结果,方法必须定义返回值,并且方法中必须使用return语句返回数据;
如果无返回值则定义为void,此时return语句可写可不写;
返回结果只能有一个,若返回多个结果,要用数组返回(返回多个值)。
递归调用:
方法中调用了方法本身,用递归解决问题比较简练,只需考虑一层逻辑即可!
但是需要有经验。
一定要有结束条件!
f
(1)=1;
递归层次不能太深。
总之:
慎用递归!
2.10插入排序
将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素循环第1条规则,找出最小元素,放于第1个位置经过n-1轮比较完成排序。
for(inti=1;
i<
arr.length;
i++){
intk=arr[i];
//取出待插入元素
intj;
//找到插入位置
for(j=i-1;
j>
=0&
k<
arr[j];
j--){
arr[j+1]=arr[j];
//移动元素
}
arr[j+1]=k;
//插入元素
System.out.println(Arrays.toString(arr));
}
2.11冒泡排序
比较相邻的元素,将小的放到前面。
for(inti=0;
arr.length-1;
booleanisSwap=false;
for(intj=0;
j<
arr.length-i-1;
j++){
if(arr[j]>
arr[j+1]){
intt=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
isSwap=true;
if(!
isSwap){break;
}
2.12冒泡排序:
轻气泡上浮的方式
冒泡排序法可以使用大气泡沉底的方式,也可以使用轻气泡上浮的方式实现。
如下为使用轻气泡上浮的方式实现冒泡排序算法。
for(inti=0;
for(intj=arr.length-1;
i;
if(arr[j]<
arr[j-1]){
arr[j]=arr[j-1];
ar