Java 类的一般特征
1. 创建类的对象时的内存结构
用图来解释:
使用new 创建 a1 时,成员变量的值都是初始默认值。 然后显式的改变其属性的值。
创建a3 时,a3 是直接指向 a1, 即a3 = a1, 两个对象是一样的, 修改其一 会改变另一个。
2. 成员变量和局部变量的区别
成员变量:如果在声明的时候,不显式的赋值,那么不同数据类型会有不同的默认初始化值。
局部变量:一定要显式的赋值。(局部变量没有默认初始化值)
二者在内存中存放的位置不同:成员变量存在于堆空间中;局部变量:栈空间中。函数代码执行完,局部变量 即被弹出栈。
(题外话:关于变量的分类:1)按照数据类型的不同:基本数据类型(8种) & 引用数据类型
2)按照声明的位置的不同:成员变量 & 局部变量 )
3. 匿名类对象:创建的类的对象是匿名的。
1)当我们只需要一次调用类的对象时,我们就可以考虑使用匿名的方式创建类的对象。
2)特点:创建的匿名类的对象只能够调用一次!
4. 方法的重载(overload)
要求:1.同一个类中 2.方法名必须相同 3.方法的参数列表不同(①参数的个数不同②参数类型不同)
补充:方法的重载与方法的返回值类型没有关系!
(eclipse 多行注释:Ctrl+/ 或 Ctrl + Shift + / ; 取消多行注释:Ctrl + / , Ctrl +Shift + \ 。)
5. 可变个数的形参的方法:
* 1.格式:对于方法的形参: 数据类型 ... 形参名
* 2.可变个数的形参的方法与同名的方法之间构成重载
* 3.可变个数的形参在调用时,个数从0开始,到无穷多个都可以。
* 4.使用可变多个形参的方法与方法的形参使用数组是一致的。
* 5.若方法中存在可变个数的形参,那么一定要声明在方法形参的最后。
* 6.在一个方法中,最多声明一个可变个数的形参。
6. 方法的参数传递
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
1)形参是基本数据类型的:将实参的值传递给形参的基本数据类型的变量
2)形参是引用数据类型的:将实参的引用类型变量的值(对应的堆空间的对象实体的首地址值)传递给形参的引用类型变量。
以交换两个变量的值阐述。
(1) 直接在main 函数里
参数交换直接在栈里进行。
(2)定义一个swap(int i, int j) 函数。
在调用函数后,并不能实现变量值的交换。因为只是值传递。
(3)定义一个swap(DataSwap d) 函数。DataSwap 是定义的一个类,里面有两个参数 i 和 j 。
因为是引用类型变量,传递的是地址,所以在调用函数的时候可以实现变量值的交换。
看一个例子:
class Value { int i = 15; } class TestValue { public static void main(String argv[]) { TestValue t = new TestValue(); t.first(); } public void first() { int i = 5; Value v = new Value(); v.i = 25; second(v, i); System.out.println(v.i); } public void second(Value v, int i) { i = 0; v.i = 20; Value val = new Value(); v = val; System.out.println(v.i + " " + i); } }
问 TestValue 执行完的结果。
所以是:15 0
20
7. 面向对象特征之一:封装和隐藏
四种访问权限修饰符:
对于class的权限修饰只可以用public和default(缺省)。
public类可以在任意地方被访问。
default类只可以被同一个包内部的类访问。
8. 构造器
构造器的特征:
它具有与类相同的名称
它不声明返回值类型。(与声明为void不同)
不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
构造器的作用:创建对象;给对象进行初始化 。
注意:Java语言中,每个类都至少有一个构造器
默认构造器的修饰符与所属类的修饰符一致
一旦显式定义了构造器,则系统不再提供默认构造器
一个类可以创建多个重载的构造器
父类的构造器不可被子类继承
9. this 关键字
* 1.可以用来修饰属性、方法、构造器
* 2.this理解为当前对象或当前正在创建的对象.谁调用我,this 就表示谁。比如:this.name,this.show();
* 3.可以在构造器中通过“this(形参)”的方式显示的调用本类中其它重载的指定的构造器。
* 要求:1.在构造器内部必须声明在首行!
2.若一个类中有n个构造器,那么最多有n-1个构造器中使用了this(形参);
3.调用this()的构造器不能构成环。
10. JavaBean是一种Java语言写成的可重用组件。所谓javaBean,是指符合如下标准的Java类:
类是公共的
有一个无参的公共的构造器
有属性,且有对应的get、set方法
11. package 关键字
package:声明源文件所在的包,写在程序的第一行。
* 每“.”一次,表示一层文件目录。
* 包名都要小写。
12. import 关键字
若引入的包为:java.lang,则编译器默认可获取此包下的类,不需要再显示声明。
import语句出现在package语句之后、类定义之前
可以使用import lee.* ;语句,表明导入lee包下的所有类。而lee包下sub子包内的类则不会被导入。import lee.sub.*;
import语句不是必需的,可坚持在类里使用其它类的全名
JDK 1.5加入import static语句,表示导入指定类的static的属性或方法。
如果导入的类是java.lang包下的,如:System String Math等,就不需要显式的声明。
JDK中主要的包介绍:
1. java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。
2. java.net----包含执行与网络相关的操作的类和接口。
3. java.io ----包含能提供多种输入/输出功能的类。
4. java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
5. java.text----包含了一些java格式化相关的类
6. java.sql----包含了java进行JDBC数据库编程的相关类/接口
7. java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界 面(GUI)。
8. java.applet----包含applet运行所需的一些类。