一、方法
(一)方法重载
在Java程序中,如果同一个类中包含了两个或两个以上方法的方法名相同,但参数列表不同,则被称为方法重载
三个原则:
在同一个类中;
方法名相同;
参数列表不同,即参数的个数、或对应位置上的类型不同。
(二)构造方法
构造方法(也称为构造函数)是类的一个特殊方法,用于创建对象时初始化对象中的属性值。
语法:
[访问符] 类名 ([参数列表]){
//初始化语句;
}
(1)方法名和类名相同
(2)方法名的前面没有返回值类型的声明
(3)方法中不能使用return语句返回一个值
1、类的构造器(方法)
每一类都有自己的构造方法,或者称为类的构造器。构造方法是用来创建一个类的实例的。
具有特点和作用:
构造方法是用类名作构造方法名;
构造方法具有参数和语句体,但没有返回类型的声明。如果有返回类型的声明,则此方法就再不是构造方法,而成为一个一般的成员方法;
构造方法不是类的成员方法,所以不能用对象调用它。
构造方法的调用是由new运算符实现;
构造方法返回的是这个类的实例的引用;
构造方法中的语句实现对成员变量的初始化;
构造方法的方法过载。一个类可以有多个构造方法;
构造方法之间通过this()形式相互调用。
2、类构造器(方法)
类的构造方法又可以分为两种
默认构造方法
非默认构造方法
默认构造方法是指不带参数的构造方法,该方法可以有语句,也可以没有语句;
非默认构造方法是指带参数的构造方法。
类创建时没有创建构造器,则在编译时编译器自动为该类添加一个默认构造器,即没有创建构造器的类可以直接使用默认构造器。
类创建时如果有任何构造器被创建,则在编译时编译器不再为该类创建默认构造器。即创建了构造方法的类,不再自动有一个默认的构造方法,或者说默认构造器失效,除非也创建一个不带参数的构造器。
(三)this关键字
this是Java的一个关键字,可以出现在实例方法和构造方法中,但不可以出现在类方法中。
1、指代对象本身
this用于指代调用成员方法的当前对象自身。语法格式:
this
2、this访问本类的成员变量和成员方法
this关键字可以出现在类的实例方法中,代表使用该方法的当前对象。
this.成员变量
this.成员方法
3、在构造方法中使用this
this关键字可以出现在类的构造方法中,代表使用该构造方法所创建的对象。注意:只能在构造方法里使用
this([参数列表])
对象的浅拷贝与深拷贝
拷贝:利用已存在的对象,来创建当前对象。
浅拷贝:当对象的属性是基本数据类型时,属于浅拷贝。
深拷贝:当对象的属性是引用数据类型时,属于浅拷贝。
(四)初始化对象
定义完一个带参数的Person()构造方法后,就可以通过此构造方法来创建一个Person对象
public static void main(String args[]){
//创建Person类的一个对象p
//Person p=new Person();
Person p=new Person("赵克玲",35,"青岛");
//使用对象p,调用display()方法显示对象各成员变量的默认值
p.display();
}
使用构造方法初始化对象也可以先声明,再创建
- //声明对象并实例化
- Person p=new Person(“赵克玲”,35,“青岛”);
等价于:
- Person p;//声明对象
- p=new Person(“赵克玲”,35,“青岛”);//实例化对象
(五)可变参数
Java允许定义方法时参数的个数可以变化,这种情况称之为“可变参数”。
语法:
[访问符] [修饰符] <返回类型> 方法名([参数列表],数据类型… 变量){
//方法体
}
示例:
public int add(int a,int b){
//…省略
}
- 1、可变参数只能处于参数列表的最后
- 2、一个方法中最多只能包含一个可变参数
- 3、可变参数的本质就是一个数组,因此在调用一个包含可变参数的方法时,既可以传入多个参数,也可以传入一个数组。
二、封装与访问控制
1、包
Java引入包的机制,提供了类的多层命名空间,解决类的命名冲突、类文件管理等问题。
借助于包可以将自己定义的类与其它类库中的类分开管理。
定义包:
语法:
package mypackage;//定义包
示例:
package com.qst.chapter03;//定义多级包
- 1、package语句必须作为Java源文件的第一条非注释性语句;
- 2、一个Java源文件只能指定一个包,即只有一条package语句,不能有多条package语句;
- 3、定义包之后,Java源文件中可以定义多个类,这些类将全部位于该包下;
- 4、多个Java源文件可以定义相同的包。
导入包:
Java中一个类可以访问其所在包中的其他所有的类,但是如果需要访问其他包中的类则可以使用import语句导入包。
语法:
import 包名.类名;//导入指定包中指定的类
import 包名.*;//导入指定包中所有的类
示例:
import java.util.*;
import com.qst.chapter03.entity.Student;
- 导入包之后,可以在代码中直接访问包中的这些类
示例:
Data nowDate=new Date();//Date位于java.util包
Student stu=new Student(); - 也可以不使用import语句导入相应的包
java.util.Date nowDate=new java.util.Date();
com.qst.chapter03.entity.Student stu=new com.qst.chapter03.entity.Student(); *
指明导入当前包的所有类,但不能使用“java.*
”或“java.*.*
”这种语句来导入以java为前缀的所有包的所有类。一个Java源文件只能有一条package语句,但可以有多条import语句,且package语句在import语句之前。