java2 实用教程第四章
博主原创 转载请注明地址
1成员变量
声明变量所声明的变量被称为成员变量和域变量,成员变量在类中的书写位置与前后顺序无关,
但是有个特点就是变量的赋值问题:成员变量在定义的时候可以有默认值,而域变量在定义的时候没默认值,所以在定义的时候应该特别注意是否需要赋值的问题
变量名的定义也有规范的要求,如果变量是一个单词组成的,那么最好首字母大写,如果是两个甚至两个以上的单词组成,那么最好从第二个单词开始首字母大写
在类中对变量的操作只能在方法中操作,例如需要计算或赋值的一系列问题,赋值当然也可以在定义的时候赋值,但是记住不要在除了方法中和定义意外赋值,java中不允许这么做
2创建对象用类创建一个对象需要分成两部,
1)先用类定义一个变量
2)使用new方法为对象分配内存
例如:类Lader 定义对象lader
Lader lader;
lader=new Lader();
new运算符再为对象分配变量以后,将返回一个引用给对象变量
分配给对象的变量我们习惯性的称为对象的实体
3垃圾收集
有时候我们在操作的过程中会将一个对象赋给另外一个对象,说白了就是把a对象的引用赋给了b对象,这时就是两个对象公用一段内存,a对象的实体就不属于任何一个变量了,
java有所谓的垃圾收集机制,这种机制可以周期性的检测某个实体是否已经不再属于任何一个对象拥有,如果发现了这样的实体,就释放实体所占有的内存,
如果希望java虚拟机立刻执行垃圾收集操作,可以用System类调用gc()方法
4
在java语言中,类有构造方法,但是没有析构方法
5
如果需要编译某个目录下的所有java文件,可以进入该文件,使用通配符*代表所有源文件名字来执行编译全部文件的功能
例如c:p/目录下的文件
那么只是需要执行 c:p/ >javac *.java
6对象的组合与类之间的关系
如果一个对象组合了另一个对象,那么a对象可以使用b对象的方法
通过组合对象有几个特点
(1)通过组合对象来复用方法也称为黑盒复用,因为当前对象只能使用组合对象的方法,而所组合的对象的方法的细节及其算法的实现时不知道的,所以习惯性称为黑盒复用
(2)当前对像可以随时改变所包含的对象,其实即对象与所包含的的对象属于弱耦合关系
关系在UML中学了大家学了4种主要关系,这里课本只是介绍了两种,那么我就大致概括一下这两种
如果a类中的成员变量是用b类声明的对象,那么a和b的关系式关联关系
依赖关系:如果A类中某个方法的参数是b类声明的对象或某个方法返回的数据类型b类的对象,那么a和b是依赖关系
7实例成员与类成员(变量)
定义:在声明成员变量的时候,如果用关键字static给予修饰的称作类变量,否则叫做实例变量,(类变量也叫static变量,静态变量)
两种变量的区别:
类变量:当类有类变量的时候,如果使用类 new创建不同的对象的时候,分配给这些对象的类变量共同占有一块内存,而实例变量是每个对象的实体分别占有一个属自己对象的内存;
不管在类中有没有声明类变量,但是在java程序执行的时候,类的字节码文件被加载到内存的时候,都会自动为类变量生成一段内存,当程序执行结束的时候才开始释放,但是实例成员是只有定义的时候
才会在内存中为它生成一段空间,否则不会生成空间
访问方式:实例成员变量只能通过对象来进行调用与访问
而类成员变量不仅可以通过对象来进行访问,也可以通过类名进行访问
8 实例方法和类方法的区别
(1)对象调用实例方法:当类的字节码文件被加载到内存的时候,内存并没有为其分配入口地址,只有当该类创建一个对象的时候,才会分配相应的入口地址
(2)而类方法恰恰相反,在类的字节码文件被加载到内存的时候,就已经为其分配了入口地址,
综上所述:调用类的实例方法只能通过对象进行调用,而调用类的类方法可以通过类名和对象名进行调用
类的实例方法不仅可以调用实例成员,而还可以调用类成员
但是类方法只能调用类成员。因为在创建对象之前,类的实例成员变量还没有分配内存
设计类方法的原则:我们通常都是定义的实例方法,但是有的时候定义类方法效果会更好,当一个方法不需要操作任何类的势力成员的时候,我们可以定义为类方法,因为这样通过类就可以
对他进行调用。不必另外定义对象,那样反倒还会为实例变量分配内存,反倒浪费了不必要的内存空间。比如java类库中的Array类,Math类等等,该类中的所有方法都是static方法。这样对
这些库中的类的方法进行调用得时候直接通过类名调用其方法就可以了,不必要再创建一个对象在对其进行调用
9方法重载
java中有两种多态:方法重载和方法重写
重写主要是和继承有关的,再第五章还会学到
下面这句话对方法重载概括的很好:
对象的行为时通过类中的方法来体现的,行为的多态性就是方法的重载
再使用方法重载的时候要尽量避免出现歧义
10:this关键字
this是java中的一个关键字,具体表示某个对象,它可以出现在实例方法和构造方法中,但是不可以出现在类方法中
this关键字出现在类的构建方法中,代表该构建方法所创建的对象
(1)在实例方法中如何使用this
实例方法可以操作类的成员变量和类变量、、下面四个实在实例方法中对下面几种情况进行调用得规则
操作成员变量的时候默认的格式为
this 。成员变量
操作类变量的默认格式为
类名。成员变量
操作成员方法的默认格式为
this。成员方法
操作类方法的默认格式为
类名。类方法
当然在实例方法中调用另一个方法的时候完全可以省略this关键字和类名,即上面提到的最后两种是不必要的
(2)this虽然可以出现在实例方法中,但是不可以出现在类方法中,原因是类方法可以通过类名直接进行调用,这时候,可能还没有任何对象产生
11包问题
包名的目的主要是为了区别相同的类名,当java不同的源文件有相同的类名的时候,可以通过不用的包进行区分
通过关键字package语句可以 声明包语句,即为该源文件中声明的类指定包名
eg:package 包名;
如果源文件中省略了包名,那么源文件中所定义的类都会被默认的认为是无名包的一部分,只要这些类的源文件被保存在相同的目录下,他们就属于同一个包,只不过是没有包名;
包名可以是一个合法的标识符,可以是诺干个标识符中间加上小数点分割而成;
eg
package sum;
package sum。nihao。cn;
(1)如何运行有包名的主类
先找到包名主类的目录的上一级目录,在运行的时候,必须写上主类的全名,因为使用了包名,所以在运行的时候,主类的全名就是“包名.主类名”
12import语句
如果一个类想要使用的类和他不在一个包中,那么就需要使用import语句实现
(1)引入类库中的类:如果要使用某个包中的类,就是用import语句
eg: 如果要引入java。util包中的date类 就使用下面的语句import java.util.Date;
另外扩展:java.lang包时java语言的核心类库,它包含了许多java运行时候不可缺少的类库,系统会·自动为程序引入该包中的类(例如System类,Math类),因此并不是需要使用import语句来引入该类
使用import语句引入整个包的所有类的话,那么可能会增加编译时间,但是绝对不会影响程序的运行性能,因为当程序真正运行的时候,只有需要使用的类的字节码文件才会被编译到内存之中;
(2)引入自定义的包中的类: 为了时用户可以引入自定义包中的类,可以在classpath中指定自己需要包的路径,默认的classpath路径的后边会有下面两个标点符号,; 整个符号就时可以加载应用程序当前目录中
的无名包类
13访问权限
访问权限的关键字就是c++中大家学到的那几个,除此之外还有一个友好型default
需要特别注意的是,在编写类的时候,类中的实例方法总是可以操作类中的实例变量和类变量,类中的类方法总是可以操作类中的类变量,这些鱼访问权限并没没有直接的关系
面向对象编程提倡对象应当在调用方法的时候改变自己的属性,类应当提供操作数据的方法
(1)友好变量和友好方法
不用public,pricate,protected修饰的变量和方法都被称作友好型
(2)可以在另外任何一个类中使用public的类创建对象,日过一个类不适用public类修饰,那么这个类被称作友好类·,在另外一个类使用友好类创建的对象的时候,要保证这两个类应该在同一个包种
下面列出一个表格,这个表格是我们java老师给我们整理的,感觉还不错,方便记忆
下面用1代表可以,0代表不可以
类内部 本包 子类 外部包
public 1 1 1 1
protected 1 1 1 0
default 1 1 0 0
private 1 0 0 0
14基本类型的类封装
java在提供基本数据类型的时候也提供了与基本数据类型相关联的类,实现了对基本数据类型的封装
这些类在java.lang包中,分别是Byte,Integer,Short,Long,Float,Double,Character类
他们的构造函数和对象的调用方法都相似,举一个例子便可以
eg:double类
他的构造方法就是 Double(double num)
Double对象调用方法doubleValue()就可以返回想要的类型的值,
其他的几个类都是相关的
15对象数组
对象数组最重要的就是数组的定义和使用
例如Student类想定义一个大小为10的对象数组,
Student 【】 stu;
stu=new Student();
上述两部仅仅是定义了数组stu中有10个元素,每个元素都是Student类的独享,但是目前这些对象都是空的
在使用之前,应该创建数组所包含的对象
stu【0】=new Student();
16jar文件
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件
中文名字是java归档文件
类型是压缩文件
JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的
zip文件及时一个如今非常流行的压缩文件
(1)如何使用java运行环境中扩展的类
首先我们使用jar。exe命令吧一些类的字节码文件压缩成一个jar文件,然后将这个文件存放在java运行环境的扩展中去,即将jar文件存放在JDK安装目录的文件夹下,这样,java应用程序就可以使用这个jar文件中1的类创建对象了
17搭建流水线
18课后小结
(1)通过对象的组合可以实现方法复用
(2)对象访问自己的方法以及调用方法受访问权限的限制