达内java培训学习笔记.docx
《达内java培训学习笔记.docx》由会员分享,可在线阅读,更多相关《达内java培训学习笔记.docx(134页珍藏版)》请在冰点文库上搜索。
达内java培训学习笔记
达内java培训学习笔记:
下载、安装Eclipse
进入Eclipse项目的主页http:
//www.eclipse.org,点击Downloads,进入下载页。
Eclipse最新的版本是3.3版,但是3.3版的多国语言翻译包还没有出来,所以我们可以使用一个稍早一点的版本3.2。
点击3.2进入其下载页,这个页面有很多下载连接,包括EclipseSDK在很多平台上的版本;
这里我们只需要下载eclipse-SDK-3.2-win32.zip将这个文件解压缩到磁盘的目录,如D:
\eclipse。
在运行Eclipse之前首先应该安装好JDK,设置好环境变量JAVA_HOME、CLASSPATH和PATH。
为D:
\eclipse下的eclipse.exe在桌面上建立一个快捷方式。
双击快捷方式启动Eclipse。
==========================================================================================================
设置JRE:
1.选择Window->Preferences,然后选择Java->InstalledJREs,然后选择jre1.5.0_07,单击Edit按钮.
2.单击Browse按钮,选择JDK的安装路径,然后单击OK确定.这样Eclipse下的JDK就已经设置完成了.
==========================================================================================================
第一个Eclipse工程:
下面我们编写一个简单的HellWorld程序,步骤如下:
1.选择File->New->Project
2.项目列表选JavaProject
3.点击“下一步”;
4.输入项目名称,例如:
Java;选择相应的JRE(默认即可);然后选择字解码文件和源文件分离.
5.点击Finish;
6.鼠标移动到src目录下单击鼠标右键,New->Package,新建一个包,然后输入包名;
7.在工具条里点击“创建Java类”的按钮(带有一个C标记);
8.在名称域输入HelloWorld;
9.点击publicstaticvoidmain(String[]args)的复选框,让Eclipse创建main方法;
10.点击Finish;
11.一个Java编辑窗口将打开,在main方法中输入System.out.println(“HelloWorld”)行;
12.使用Ctrl-s保存,这将自动编译HelloWorld.java;
13.点击工具条里的RunAs按钮;然后选择JavaApplication项运行程序
14.这时候,将会打开一个控制台窗口,一句“HelloWorld”将会显示在里面。
==========================================================================================================
eclipse常见问题:
1.如何将建立eclipse的快捷方式?
答:
在桌面单击右键选择新建启动器,填上名字和命令的路径(即/opt/eclipse/eclipse).
2.如何显示行号?
答:
选择Window->Preferences,然后选择General->Editors->TextEditors,把showlinenumbers选项勾上.
3.如何改变java源文件字体大小?
答:
选择Window->Preferences,然后选择General->Appearance->ColorsandFonts->Java->JavaEditorTextFont
然后选择Change按钮就可以改变字体大小了.
4.如何去掉自动生成注释?
答:
选择Window->Preferences,然后选择Java->Codestyle->CodeTemplates,选择Comments和Code选项中的内容,
单击Edit按钮,把默认的注释删掉就可以了.
5.为何刚刚拷贝过来的文件不能立即显示?
答:
需要在你刚刚做过更新的目录上点击右键,然后选择Refresh,刷新该目录即可显示.
6.Eclipse常用快捷键:
Ctrl+Enter:
跳到下一行行首
Alt+Shift+X+J:
运行当前程序
Ctrl+F11:
运行上次编译过的程序
Shift+Ctrl+F:
格式化代码
Shift+Ctrl+X:
将所选字符转为大写
Shift+Ctrl+Y:
将所选字符转为小写
Ctrl+1:
迅速定位错误处理
Ctrl+M:
快速对当前视图最大化
Alt+Shift+S:
快速显示Source选项
Alt+/:
代码注释
Ctrl+/:
代码注释/取消注释
Ctrl+D:
删除光标所在行
Ctrl+鼠标停留:
可以显示类和方法的源码
Ctrl+Shift+S:
保存全部
Java第一天2007年4月23日
1、Java之父Golsling
1995年5月23日Java诞生
1998年12月1.2版本Java2J2SEJ2EEJ2ME
2004年12月1.5版本(5.0)JavaJavaSEJavaEEJavaME
2、JavaSE---Java标准平台
JavaEE---企业级平台
JavaME---微小平台,用在资源受限的平台上
3、
(1)跨平台---一次编译,到处运行
(2)简单---简化C++,取消了指针,对指针进行了上层的封装,它保证能够通过这个指针(引用),来访问有效的内存单元。
不允许多继承,使继承关系成树装图,每个类都只能由一个父类。
java语言的开发效率高,但执行效率低。
(相当于c++的55%)
(3)纯面向对象的语言---都要放在类中
(4)垃圾回收机制---自动垃圾收集,永远不会出现内存泄露的问题
4、虚拟机
java语言是先编译后解释,java源码是通过编译生成一种特殊的.class的中间字节码文件,然后再由JVM进行解释运行。
(编译)(解释)
.java---->.class--->可执行文件
所以效率低,是C++的20倍
5、java源代码中的main方法的定义写法。
main方法是程序的入口。
publicclassHello{//一个源文件中只能有一个公开类,而且源文件的文件名与公开类的类名完全一致
publicstaticvoidmain(String[]args){//程序入口publicstatic可以调换顺序
System.out.println("Helloworld");//打印语句
}
}
编译命令javacxxxx.java源文件的名字,源文件中的一个类会对应编译生成一个.class文件
运行命令javaxxxx类的名字---启动虚拟机
6、环境变量
JAVA_HOME=/opt/jdk1.5.06JDK安装路径---JDK=JRE{JVM(硬件)+编译器(软件)}+编译器工具+类库
PATH=$Path:
$Java_Home/bin:
.
ClassPath=.类路径
7、包---分类放置,减少命名空间
包名.类名表示一个类的全限定名
javaxxx.xxx.ClassA---运行时要在包结构的上一层目录来运行。
javac-d.xxxx.java---编译的时候,按照包结构存放字节码文件,此命令生成的.class文件在当前目录
packagexxx.xxx,包的定义在一个程序中只能由一个
importxxx.xxx.xxx.ClassA;---在程序中声明ClassA类,使用的时候不需加包名,使用同一包内的类时,不用引入
importp1.p2.p3.p4.p5.*;---声明p5包中所有的类,不能代表其子包
系统会在每个java程序中隐含导入了java.lang这个包
8、java中的注释,
单行注释//......
多行注释/*.......*/
文档注释/**........
(换行标签)*/,用javadoc命令可以根据原码中的文档注释生成注释文档(html格式)。
文档注释中可以使用html标签。
javadoc-d路径(指定注释文档的保存路径)xxx.java
文档注释一般写在类定义之前,方法之前,属性之前。
在文档注释中可以用@author表示程序的作者,@version表示程序的版本,前两个注释符号要写在类定义之前,用于方法的注释@param对参数进行注释,@return对返回值进行注释@throws对抛出异常的注释。
10、标识符规则---类,方法,变量,同时也是包名的规范
由字母(汉语中的一个汉字是一个字母),数字,下划线和货币符号组成,不能以数字开头。
大小写敏感
没有长度限制,不能有空格
不能使用Java的关键字和保留字
java中的关键字
goto和const在java中虽然不再使用但是还作为保留字存在
java中没有sizeof这个关键字了,java中的boolean类型的值只能用true和false,且这两个也是关键字
enum枚举assert断言
一个标识符尽量符合语义信息,提高程序可读性
类名:
每个单词首字母大写,
变量和方法:
第一个单词小写,后边的每个单词首字母大写
包名:
全部小写
常量:
全部大写
11、局部变量:
定义在方法中的变量
(1)先赋值后使用
(2)从定义变量的代码块开始到代码块结束
(3)在同一范围内不允许两个局部变量发生命名冲突
****
Java第二天2007年4月24日
1、Java的数据类型
(1)简单类型---8种有符号的数据类型
a)整型
byte1字节8位-128到127
short2字节16位-2^15到2^15-1-32768到32767
int4字节32位-2^31到2^31-1-2147483648到2147483647整型值存放,正数存放原码(二进制码),负数则存放补码(原码按位取反末位加一)。
long8字节64位-2^63到2^63-1longa=40000l;//在数字的结尾加“l”,表示long类型的字面值
b)浮点类型
float4字节32位floata=1.3f;
double8字节64位doublea=1.3;
double和long比较,double表示的数值要大,因为有科学计数法
floata=1.3;//error会造成精度丢失,强转floata=(float)1.3;或者floata=1.3f;
c)字符类型
char2字节16位
d)布尔型
booleanfalse/true//Java中false与0不能转换
自动类型提升:
a运算符b
a和b中有一个是double,结果就是double
a和b中有一个是float,结果就是float
a和b中有一个是long,结果就是long
除以上之外的情况,结果都是int
char是无符号的16位整数,字面值必须用单引号括起来;‘a’
String是类,一个String的字符串是一个对象,非原始数据类型;
在字符串中使用"+",表示字符串的连接,系统重载了这个运算符
char类型也可以用通用转译字符,但是不能用ASCII码。
可以用“\u0000”(十六进制)这种格式,因为char型中使用的是unicode编码方式。
charc1='a';
charc2=97;
charc3='\u0061';//一个字节用2个十六进制的数字表示
整数除0有异常,double除0没有异常
(2)对象类型
2、java中的运算符(java的运算符的优先级和结合性和c++相同)
***System.out.println(3/2)按整型计算得1***
bytea=1;
a=a+2;//不合法,自动类型提升,赋值丢失精度
a+=2;//不会发生自动类型提升的,合法
a++;//不会发生自动类型提升的
1)>>=前面是零补零,前面是一补一;右移一位比除以2效率高
2)>>>=无符号右移(强制右移都会移进零),
>>=和>>>=对于负数不一样
正数:
右移n位等于除以2的n次方
负数:
变成正数。
3)&&短路与,前面为假,表达式为假,后面的操作不会进行,&非短路运算符,会对所有条件进行判断。
例:
inta=4;
if(a<3&(b=a)==0)b赋值
if(a<3&&(b=a)==0)b不赋值
4)||短路或,前面为真,表达式为真,后面的操作不会进行,|会对所有条件进行判断。
5)instanceof,是用于判断一个对象是否属于某个类型
6)java中的求余运算符“%”可以对两个实型变量求余5%2=1
3、流程控制
(1)控制流
if()
if()….else
if()…..elseif()….else
注意:
else只是和其上面的同层的最近的if()来配对。
(2)switch(s){
case'a':
……..
case1:
……break;
default:
…………
}
注意:
switch()内数据类型为byteshortcharint类型,只有以上四种类型的才可以在switch()中使用。
case块中不加break时顺序执行下面的语句。
4、循环语句
for(inti=0;iwhile(){}----循环0或多次
do{}while();-----------注意加分号循环1或多次
5、语法
在main方法中要使用全局变量或调用其他方法时,要求全局变量和方法要有static修饰
命令行参数javaClassab
args[0]=a
args[0]=b
字符串转成int类型inti=Integer.parseInt(a);
6、数组
内存中的连续空间
数组是一次性定义多个相同类型的变量
Java中一个数组就是一个对象,有属性,没有方法
int[]a;//定义一个数组,变量名就是指向数组首地址的指针
a=newint[10];//为数组分配空间
a.length;//得到数组的长度
数组创建后有初始值:
数字类型为0布尔类型为false引用类型为null
String[]默认值null
初始化、创建、和声明在同一时间
int[]i={0,1};//显示初始化
int[]i=newint[]{0,1};//注意:
这样显示的初始化的时候,newint[]中括号中必须是空的,不能填数字
Car[]c={newCar(),newCar()};
数组拷贝
System.arrayCopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength);
src源数组,srcPos从第几位开始拷贝(数组下标,从0开始),dest目标数组,destPos目标数组放置的起始位置,length,表示要拷贝的长度。
拷贝一个数组到另一个数组。
多维数组
1)有效定义
int[][]i1=newint[2][3];(同时给定一维,二维的空间)
int[][]i2=newint[2][];(给定一维的空间,二维空间待定,不规则的二维数组)
i2[0]=newint[2],i2[1]=newint[3];
*C++中int[][]=newint[][3];有效
2)无效定义
int[][]i1=newint[][3];
3)数组长度------------数组的属性length(在二维数组中这个属性只代表第一维的长度)
int[]i=newint[5];
intlen=i.length;//len=5;
Student[][]st=newStudent[4][6];
len=st.length;//len=4;
len=st[0].length;//len=6;
练习:
(1)数组元素的偏移
在使用数组的时候,通常使用一个辅助变量纪录数组中的有效元素的个数,还表示下一个可插入位置的下标
(2)数组元素的轮换
偶数个球队足球比赛,每个队和每个队有且只有一场比赛
把数字按"U"字型摆放,左边最上边的数字不变,其他数字按逆时针旋转
(3)有一个奇阶的方阵,填如数字,使得
第一个数一定放在第一行的最中间,第二个放在右上方,行越界,放在此列的另一侧,列越界放在此行的另一侧
行列都越界的时候,退回来,放在原来的数字下边,当要放入的地方有数字的时候,退回来,放在原来的数字下边
(1)
publicclassArrayInsertDelete{
staticint[]a={1,2,3,4,5,6};
staticintindex=6;
staticvoidinsert(intpos,intvalue){
if(index==a.length)expand();
for(inti=index;i>pos;i--){
a[i]=a[i-1];
}
a[pos]=value;
index++;
}
staticvoiddelete(intpos){
index--;
for(inti=pos;ia[i]=a[i+1];
}
}
staticvoidexpand(){
int[]b=newint[a.length*2];
System.arraycopy(a,0,b,0,a.length);
a=b;
}
staticvoidprint(){
for(inti=0;iSystem.out.print(a[i]+"\t");
}
System.out.println();
}
publicstaticvoidmain(String[]args){
print();
insert(2,7);//{1,2,7,3,4,5,6}
print();
delete(4);//{1,2,7,3,5,6}
print();
}
}
Java第三天2007年4月25日
1、面向对象的思想
anythingisanObject(万物皆对象)
符合人们客观看待世界的规律
2、抽象,从对具体的对象中抽取有用信息。
对象有其固有属性,对象的方法,即对象的行为(对象能做什么)
对象本身是简单的(功能简单),多个对象可以组成复杂的系统(对象之间彼此调用对方的方法)
3、面向对象的优点
1)对象应当是各司其职(功能简单),各尽所能(把自己的功能作到最好)。
(弱耦合性实现了前面所述的对象的特点)
2)对象的耦合性,是对象之间的联系,对象和系统之间的联系。
对象的耦合性要尽量的弱,也就是对象之间的联系尽可能的弱,对象和系统之间的联系尽可能的弱。
弱耦合性要通过一个标准来实现
3)可重用性
对象的功能越简单,复用性就越好。
(对象的耦合性弱,复用性就比较强)
4)可扩展性
系统的可插入性,是在系统中加入新的对象之后的系统稳定性。
对象的可替换性,是在系统中替换原有的对象之后的系统的稳定性。
4、面向过程和面向对象的比较
面向过程是先有算法,后又数据结构---(怎么解决问题)
面向对象是先有对象(数据结构),后有算法(对象间的方法调用)---(用什么做)
5、类的定义
1)属性
类型变量名;-->实例变量,系统赋初始值
默认值使用范围命名冲突
实例变量系统赋初始值在类的内部使用允许实例变量和局部变量发生命名冲突,变量的值->局部优先
局部变量先赋值后使用定义他的代码块同范围内不允许两个局部变量发生命名冲突
2)方法的定义:
不允许方法的声明和实现分开
方法声明的组成:
(a)方法的修饰符(0或多个修饰符出现的顺序无关)|
(b)方法的返回值类型|顺
(c)方法名|序
(d)方法的参数表|向
(e)方法中允许抛出的异常|下
V
6、方法的重载
java中方法的重载(overload)方法名相同,参数表不同(个数,类型,排列顺序),其他部分可以不同。
调用时要给出明确参数并确定调用某一方法。
在编译时,编译器会根据参数选择适当的方法,所以重载也叫编译时多态。
**方法的重载可以屏蔽一个对象同一类方法由于参数不同所造成的差异**
向上就近匹配原则
如果方法的参数表中的数据类型和调用时给出的参数类型不尽相同时会根据向上匹配的就近原则。
(类型就近向上转化匹配)
publicvoidm(bytea,shortb){
System.out.println("m(byte,short)");
}
publicvoidm(shorta,byteb){
System.out.println("m(short,byte)");
}
此时若用2个byte作为参数调用m()方法,编译会出错,因为按照向上就近匹配原则,提升哪个都可以,出现语义不明确的错误
7、构造方法
1)方法名与类名相同,无返回值
2)系统提供默认无参的,空的构造方法
3)若自定义一个有参的构造方法,则系统将不提供无参的,空的构造方法
不能手工调用,在一个对象的生命周期中,只会被调用一次
8、对象的创建
Java在堆中创建对象的过程:
1)分配空间
2)初始化属性,若声明实例变