Java学习笔记Me.docx
- 文档编号:3893498
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:17
- 大小:125.08KB
Java学习笔记Me.docx
《Java学习笔记Me.docx》由会员分享,可在线阅读,更多相关《Java学习笔记Me.docx(17页珍藏版)》请在冰豆网上搜索。
Java学习笔记Me
Java学习笔记
1java程序结构:
package//0个或1个,必须放在文件开始,作用相当于把当前文件放入指定的包中。
import//0个或多个,必须放在所有类定义之前,用于引入标准类或是已有类。
publicclassDefinition//0个或1个,公共类定义,文件名必须与该类的类名完全相同。
classDefinition//0个或多个,接口定义,个数不受限制。
interfaceDefinition//0个或多个,接口定义,个数不受限制。
2java源码三要素:
1)一个可选的包声明
2)任意数量的引入类声明语句
3)类和接口声明。
只有一个public公共类,且要求与源文件同名。
3java语言对标识符规定:
1)标识符以字母,下划线,美元符开始的一个字符序列。
2)除开始的第一个字符外,后面的字符可以跟字母、下划线,美元和数字。
3)标识符大小写敏感。
4)没有长度限制。
4java命名习惯:
1)包名中的字母一律小写。
2)类名、接口名应使用名词,每个单词的首字母大写。
3)方法名,第一个单词小写,后面的每个单词的首字母大写。
4)常量名中的每个字母一律大写。
类成员变量名通常不用下划线、也不用$符号,类成员变量名的第一个字母均为小写,当类成员变量由多个名词组成混合方式表示时,则用大写字母隔开。
简单类型的标识符常量名用由下划线分开的大写的词表示。
5Java虚拟机:
6环境配置:
1)Path,因为要执行javac,Windows下没有这个命令,所以需要配置环境变量,以便任何目录下都能执行这个命令。
2)Classpath,指定class的运行路径。
7Main方法:
Java程序是由一个或是一个以上的类组合而成,程序起始的地方也被包含在类之中。
这个地方称为main(),用左右大括号将属性main()段内容包围起来,称之为method(方法)。
Main方法为程序的主方法,在一个Java程序中,有且只能有一个main方法,它是程序的开端。
通常看到的如下:
Publicstaticvoidmain(Stringargs[])//main方法,主程序开始。
{
……….
}
Public代表为公有方法;static在没有创建类的对象情况下,仍然可以运行;Void代表没有返回值;Stringargs[]代表main方法的运行参数。
Args是数组名,也可以使用其他标识符。
8类
将具有相同属性及相同行为的一组对象称为类。
广义地讲,具有共同性质的事物
的集合就称为类。
1)面向对象三大特征:
封装(Encapsulation)
1)把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(对象)中。
封装的基本单位是对象。
2)另一层含义指“信息隐蔽”,把不需要让外界知道的信息隐藏起来。
3)封装机制在程序设计中表现为,把描述对象属性的变量及实现对象功能的方法合在一起,定义为一个程序单位,并保证外界不能任意更改其内部的属性值,也不能任意调动其内部的功能方法。
4)为封装在一个整体内的变量及方法规定了不同级别的“可见性”或访问权限。
继承(Inheritance)
是一个类(子类)直接使用另一个类(父类)的所有属性和方法(权限为私有的属性和方法除外)。
Java只支持单一继承。
多态性(Polymophism)
“多态性”可用“一个对外界面,多个内在实现形式”来表示。
Java通过方法重载和方法重写以及接口来实现多态。
方法重载:
一个类中可以有多个具有相同名字的方法,由传递给它们的不同个数和类型的参数决定使用哪种方法,实现不同的功能。
方法重写:
子类可以重新实现父类的某些方法,使其具有自己的特征。
子类与父类允许具有相同的变量名称,但数据类型不同,允许具有相同的方法名称,但完成的功能不同。
接口:
实际上是一种特殊的类,其中只有方法的原型,即只给出方法的名称、参数和返回值类型,没有方法体。
这些方法的实现在子类中定义。
2)类定义:
cassDeclaration{
classBody
}
A类声明
classclassname{
}
格式:
[public][abstract][final]classClassName[extendsSuperClassName][implementsInterfaceNameList]
{……..}
B类体
classClassName{
memberVariableDeclarations
memberMethodDeclarations
}
访问权限:
public、protected、public、default
3)成员变量:
TypevariableName
完整格式:
[public|protected|private|][static][final][transient][volatile]typevariableName
4)成员方法:
A方法定义:
MethodDeclaration{
MethodBody
}
方法声明
returnTypemethodName9(){
methodBody
}
完整格式:
[public|protected|private|][static][final|abstract][native][synchronized]returnTypemethodName([paramList])[ThrowsexceptionList]
{……}
方法体
方法体上对方法的实现。
包括局部变量的声明以及所有合法的java指令。
该局部变量作用域只是在方法的内部,当方法返回时,局部变量不再存在。
局部变量由小写字母加下划线组成,如果局部变量名字与类的成员变量的名字相同,则类的成员变量被隐藏。
B方法调用
注意:
a方法属于某个对象或类,调用方法要通过对象或类来进行。
b用实际参数代替方法定义中的参数表。
1)返回语句Return
Returnexpression;
Return;
2)方法调用的形式
一是把方法调用作为一个表达式语句,一是作为一个表达式。
前者对无return返回或return后无返回值的方法,或冠有void类型说明的方法必须采用表达式语句进行。
如System.out.println(…)
后者对有返回值的方法,可以把方法调用作为一个表达式或者表达式的一部分,也可以把它作为另一个方法调用的实际参数,即嵌套调用。
3)按值调用和引用
Java与外界交换信息有三种,一是通过方法返回值,二是利用类的数据成员,三是利用参数交换信息。
A按值调用
按值调用实现的是值传送,方法中的形式参数接收实际参数的值,但并不改变实际参数的值,形式参数是局部变量,只是在方法内起作用,退出这个方法后就自动释放,对应实际参数仍保持原来的值。
B引用
引用数据类型传递给方法的是数据在内存中的地址,方法对数据的操作可以改变数据的值。
当参数类型是复合数据类型时,自动采用引用形式,即传递给方法的是数据在内存中的地址。
5)方法重载
A方法重载
B编译时多态
6)构造方法
构造方法是为类的实例定义初始化状态。
与其他方法区别:
A构造方法的名称必须与类名同名。
B无返回值
C用户不能直接调用构造方法,必须通过关键字New自动调用。
This
重载构造方法
默认构造方法
9对象
对象就是一组变量和相关方法的集合。
其中变量表明对象的状态,方法表明对象所具有的行为。
对象的生命周期包括三个阶段:
生成、使用和清除。
1)对象生成:
A对象变量
typeobjectName;
BNew运算符
New为对象分配内存空间,实例化一个对象。
New调用对象的构造方法,返回对该对象的一个引用(即该对象所在的内存地址)。
注:
如果对象变量是一个类成员变量,被创建时即没有调用new,也没有被初始化为null,则该对象变量的初始值为默认值null;如果对象变量是一个方法内的局部变量,则应显示的给该变量赋值或初始化,因为局部变量没有默认的初始值。
C对象初始化
对象的初始化指对象中的实例变量(所谓实例变量,指的是未用static属性修饰的成员变量)。
有以下几种方式:
a采用默认值
b声明变量时
classclassname{
inta=0
…
}
c使用“初始化块”
classclassname{
inta;//下面是一个初始化块,该初始化实例变量必须在块外定义。
{a=0;
…
}
….
}
d使用构造方法初始化
如果在类的描述中定义了构造方法,且定义的构造方法中不包含没有参数的构造方法时,Java不会提供默认的构造方法。
这时如使用没有参数的构造方法去初始化是非法的,如:
Integeri=newInteger();//是非法的。
2)对象的使用
Java对数据的操作上先定义,再使用,对类的对象也是如此。
对象的使用包括:
a引用对象的变量域和方法域。
b将对象作为类的一个变量域。
c将对象作为一个方法的参数或返回值。
d对象数组等。
3)对象的清除
对象清除指释放对象占用的内存。
(System.gc(),finalize())
10类成员的修饰符
1)访问控制
2)Static
A类成员
通常,类的成员必须通过创建类实例来访问,但如果希望定义一个类的成员,他独立于该类的任何实例对象,就需声明为static。
此时,可以通过类名被访问,而不需要创建任何类的实体。
被声明为static属性的成员变量和成员方法被称为类变量和类方法,而没有被声明为static属性的成员变量和成员方法被称为实例变量和实例方法。
实例变量和实例方法必须通过类的实例被访问,需要首先创建对象。
也可以通过实例变量来访问类变量和类方法。
类变量通常是全局变量。
当其类的对象被创建时,只为实例变量分配内存,并没有为类变量分配内存。
类的所有实例共享变量,每个实例对类变量的改变都会直接影响到其他变量。
类方法是全局方法。
在类方法中,除非创建了类的实例,否则仅可以访问类变量和类方法,不能访问实例变量和实例方法。
另外,在类方法中不能使用this或super,并且不能创建内部类的实例。
B类变量的初始化
与实例变量不同,类变量属于类。
它的初始化不使用构造方法来进行。
初始化类变量途径:
a使用默认值。
具体与实例变量相同。
同样,用final修饰的常值类变量不能使用默认值,否则编译错误。
b声明时初始化。
c使用静态初始化块。
当初始化不适合一个表达式时,可采用这种方式。
d使用一个类方法初始化。
3)final
Afinal修饰成员变量
Bfinal修饰成员方法
11继承
子类继承父类的变量和方法,同时也可以修改父类的变量和方法,并添加新的变量和方法。
即子类是比父类更专业化的类,它继承了父类的状态和行为,并增加了它自己的特定的属性。
Java不支持多重继承。
所有类的集合时一个树形结构。
Java中,类java.lang.Object是一切类的父类或根类,所有的类都是通过直接或是间接德继承java.lang.Object得到的。
1)类继承的实现
ClassSubClassextendsSuperClass{
….
}
子类可以继承父类中访问权限设定为public、protected、default的成员变量和方法。
但是不能继承访问权限为private的成员变量和方法。
2)成员变量的隐藏和方法重写
注:
a方法重写仅发生在两个方法的名字、参数列表和返回值完全一致的情况下,如果不是,则不会被重写。
b重写的方法不能比被重写的方法有更严格的访问权限。
c重写的方法不能比被重写的方法产生更多的异常。
3)Super
A访问父类被隐藏的成员变量。
格式:
super.variable
B调用父类的构造方法。
格式:
super.Method([paramlist]);
C调用父类的构造方法。
格式:
Super([paramlist]);
4)运行时多态
a运行时多态
b运行时多态是一种在运行时而不是在编译时调用重写方法的一种机制。
5)Instanceof运算符
5)造型:
把一个父类对象分配给一个子类变量是用。
6)Abstract类和方法
Java中,用abstract关键字修饰不能在这个类实现的方法,这样的方法称为抽象方法。
如果一个类含有一个或是多个抽象方法,那么该类也必须声明为abstract,把用abstract关键字修饰的类成为抽象类。
抽象类中不一定包含抽象方法,但包含了抽象方法的类一定要被声明为抽象类。
抽象类不能被实例化,也就是说,不能创建抽象类的任何对象。
必须创建抽象类的子类,然后再创建子类的对象,当然,子类不能继承抽象类,如果子类仍然是抽象类,则还是不能生成它的实例。
换句话说,抽象类必须被继承,由子类实现抽象类中的抽象方法。
即使抽象类中无抽象方法,也需要被继承后才能创建其子类的实例。
6)final类
12接口
为了实现多重继承功能,又不希望引进多重继承的复杂性和低效率,java提供了一种特别类型----接口(interface)。
接口是一种完全没有实现的类,在接口中只包含了抽象方法和常量的定义。
与类不同的是,接口的定义使用interface关键字,而类使用class关键字。
从本质讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,没有变量和方法的实现。
即接口是一种概念的模型,它有助于类层次结构的设计。
在代码设计时,可以首先设计所有的接口和类,然后,再设计接口的实现。
接口主要用处:
1)可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
2)可以指明多个类需要实现的方法。
3)可以了解对象的交互界面,而不需了解对象所对应的类。
Java用接口实现比多重继承更强的功能。
单一继承清楚的表明了类的层次关系,指明父类和子类各自的行为。
接口则把方法的定义和类的层次区分开来,通过它运行时动态的定位所调用的方法。
同时接口中可以实现“多重继承”,即一个类可以实现多个接口。
1)接口定义:
interfaceDeclaration{
interfaceBody
}
A接口声明
InterfaceinterfaceName{
….
}
[public]interfaceInterfaceName[extendslistOfSuperInterface]{
…..
}
默认情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。
B接口体
常量定义
typeNAME=value;
方法体
returnTypemethodName([paramlist]);
在接口中声明的方法默认具有public和abstract属性。
另外,如果在子接口中定义了和父接口相同的常量和相同的方法,则父接口中的常量被隐藏,方法被重写。
2)接口的实现
用implements子句表示一个类实现了某个接口,在类体中可以使用接口中定义的常量,
而且必须实现接口中定义的所有方法。
一个类中可以实现多个接口,在implements子句中用逗号分隔。
3)接口的使用
接口可以作为一种引用类型来使用,接口上java多态性的一种表现。
任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。
Java运行时系统动态的确定该使用哪个类中的方法。
把接口作为一种数据类型,可以不需要了解对象所对应的具体的类,而着重于他的交互界面。
13包(package)
包很大范围内实现了OOP的封装机制,它把一组类和接口封装在一个包内。
另一方面,java编译器为每个类生成一个字节码文件,且文件名和类名相同,因此同名的类有可能发生冲突。
包可以有效管理类名空间。
1)Java提供的包
Java编译器把包对应于文件系统的目录管理,或存储在诸如Zip或者JAR文件之类的档案内。
如Windows平台,名为java.applet的包中,所有类文件都存储在目录classPath\java\apple下。
其中包层次的根目录(或类路径)-----classPath由环境变量CLASSPATH来设定。
2)package语句
package语句作为Java源文件的第一条语句,指明定义的类所在的包。
格式:
packagepkg1[.pkg2[.pkg3….]];
如果源文件中没有package语句,则指定为无名包。
无名包没有路径,一般情况下,Java仍会把源文件中的类存储在当前工作目录(即存放在Java源文件目录)。
3)import语句
格式:
imprtpkg1[.pkg2[.pkg3]].(classname)*);
Java编译器为所有程序自动导入包Java.lang.如果使用其他类,必须使用import语句导入。
14对类成员的访问权限控制
另附this与supper的比较
15内部类(innerclass)
所谓内部类是指被嵌套定义于另一个类中的类。
内部类同样可以具有其成员变量和成员方法。
通过建立内部类的对象,可以存取其成员变量和调用其成员方法。
但,一般内部类中不能声明静态(static)成员,除非该内部类也被声明为静态(static)的。
内部类的类名只能用在定义它的类或语句块之内,外部引用时,必须给出完整的名称。
且内部的类名不能与包含他的类名同名。
内部类特性:
1)内部类可以作为其他类的成员。
此时,内部类可以存取包含它的类的成员(包括static,private私有成员)。
实际上,java虚拟机中,一个内部类的对象存在着对其外部类的引用,以致于内部类可以存取外部类的成员变量和成员方法。
这种情况下,可以通过一下几种途径建立内部类的对象。
A在外部类的实例成员方法中,可以直接建立内部类的对象。
B在外部的类(static)成员方法中,建立的内部类的对象必须与外部类的对象相关。
C在于外部类并行的其他类中定义的方法中,建立的内部类的对象必须与外部类的对象相关,引用内部类名时必须使用完整的标识。
Java中,普通类及接口的访问权限熟悉只能是public和default,而内部类的访问权限属性可以是public、protected、default或private。
2)内部类可以在一个语句块的内部定义,这时内部类可以存取语句块中的局部变量,但是仅限于在语句块生命周期内。
3)在一个类中可以包含两个以上的内部类,且这些内部类可以被同时冠以public属性。
4)内部类还可以在一个表达式内部被匿名定义。
如果你只创建该内部类的惟一的一个对象,就不必给它知道名字。
5)内部类可以被声明为static属性(普通类不可以)。
具有static属性的内部类变成了顶层类,不能再引用外部类对象。
6)内部类可以被定义为抽象类(具有abstract属性)或接口(interface),而被其他的内部类继承或实现。
16Java类库简介
Java类库是一包(package)的形式实现的,每个包里都含有多组相关的类,除类之外还包含接口、异常等。
1)语言包
Java语言包用Java.lang表示,由他所提供的类构成了java语言的核心。
语言包中的类似Java类库中最低级的类,java系统自动隐含地将这个包引入用户程序,用户无需用import语句引入它,就可使用其中的类。
写一个Java程序必须使用语言包中的类,语言包中主要的类有:
Object类,数据类型包装类,数学类,串类,系统及运行时类,线程类,Class类,异常处理类,过程类。
2)实用包(Utilities)
Java实用包用java.util表示,它提供了实现各种不同实用功能的类。
实用包括一个操作日期类,一组数据结构类,一个产生随机数的类和一个串标记类及其他。
实用包中的主要类和接口如下:
GregorianCalendar日历类
数据结构类:
BitSet,Dictionary,Hashtable,Properties,Vector,Stack,Enumeration
类Random
StringTokenizer
观察器
3)典型类,接口介绍
Object类
系统和运行时类(system和runtime类)
类Class
类BitSet
类GregorianCalendar
类Random
类Vector,实现了动态的分配对象列表,它适合于元素数量可变的对象数组。
类Stack,实现后进先出的对象栈。
类Dictionary,是一个抽象类,不能创建它的对象,是类Hashtable的父类。
这个类实现的数据接口上关键字和值成对存储的数集,这些关键字和值可以用于任何类型的对象,可以指定一个关键字来寻找对应的值。
类Hashtable,为存储关键字和对应值而设置了一个散列表。
这种散列表通过使用一个关键字可迅速定位并可获得存放的新,其中关键字和值可以说任何类型的对象。
类dimension,属于包java.awt,主要用来表示窗口系统所需要的一些基本组件的属性。
类dimension在一个单一的对象中同时封装了一个组件的宽度和高度属性。
接口Emumeration,说明一组枚举的方法,实现这个接口的对象可重复使用列表中的数据,它一般与向量类库连接使用。
接口Observer
17异常处理
异常是程序运行中发生的异常事件,如除0溢出、数组越界、文件找不到等。
Java用面向对象的方法来处理异常。
我们把生成异常对象并把它提交给运行时系统的过程称为抛出(throw)一个异常。
运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回溯,直到找到包含异常处理的方法为止,这一过程称为捕获(catch)一个异常。
1)Throwable类及其子类
Object—->ThrowableError
ExceptionRuntimeExeption
……..
Java编译器要求Java程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理。
2)异常处理的种类
A运行时异常:
是Java在运行时,系统在程序的运行过程中检测到的,它可能在程序的任何部位发生,而且数目可能很大。
aArithmeticException
bNullPointerException
cClassCastException
dNegativeArraySizeException
eArrayIndexOutOfBoundsException
B捕获异常
C声明异常:
有些情况下,一个方法并不需要处理它所生成的异常,而是向上传递,由调用它的方法来处理这些异常,这时就要用到throws子句,它包含在方法声明中,格式如下:
returnTypemethodName(paramlist)throwsexceptionList,其中ExceptionList中可以声明多个异常,用逗号隔开。
D抛出异常
在捕获异常前,必须有一段Java代码生成一个异常对象并把它抛出。
抛弃异常的代码可以说你的Java程序,或JDK中的某个类,或Java运行时系统。
它们都是通过throw语句来实现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 学习 笔记 Me
![提示](https://static.bdocx.com/images/bang_tan.gif)