一、重载
当一个类中,某一个方法的功能不满足需求,并且必须使用该方法,那么我们可以对方法的方法体进行重新定义达到满足需求的目的,但是必须符合某种【重载】规范
可以用同一个方法名进行定义,根据参数类型或参数个数进行选择调用某个功能
方法的重载:方法名相同,参数类型和个数不同
定义的位置:本类中
方法间的关系:同级
代码案例
package cn.com.example5;
/**
* 方法的重载
* @author Coding Sir
* @version 1.0
*/
public class OverLoad {
// 两个数相加
public int sum(int a,int b){
return a + b;
}
// 三个数相加
public int sum(int a,int b,int c){
return a + b + c;
}
// 四个数相加
public int sum(int a,int b,int c,int d){
return a + b + c + d;
}
}
二、构造函数
构造函数:构造器
作用:创建对象【负责把属性和方法记载到内存中(堆内存),并且可以初始化】
注意事项:
1、一个类中,如果没有显示定义构造器,那么jvm会给该类提供一个无参构造器【类中构造器默认指向该构造器】
2、一个类中,如果显示定义了构造器,那么jvm不会给该类提供
3、构造器可以重载
创建构造器语法:
public 类名(){}
代码案例
package cn.com.example5;
public class Constructor {
public String username;
public String password;
// 无参构造器
public Constructor(){}
// 有参构造器
public Constructor(String params1,String params2){
System.out.println(params1 + params2);
}
public void isUserName(){}
public static void main(String[] args) {
// 实例化对象
// 根据无参构造器实例化对象
Constructor constructor = new Constructor();
// 根据有参构造器实例化对象
Constructor constructor1 = new Constructor("params1","params2");
}
}
类中代码结构-推荐
public class Demo(){
// 成员变量
// 无参构造器
// 有参构造器
// 成员方法
}
三、参数传递
参数分类:形参 + 实参
形参:局部变量-用于接收传递的数据
实参:传递的实际数据
参数传递:值传递、引用传递
使用场景:类中成员变量类型、方法参数、局部变量等。
1、值传递
值传递:传递的是具体数据
代码案例
package cn.com.example5;
public class Constructor {
public String username;
public String password;
// 无参构造器
public Constructor(){}
// 有参构造器
public Constructor(String params1,String params2){
System.out.println(params1 + params2);
}
public void isUserName(String message){
System.out.println("接收的数据:"+message);
}
public static void main(String[] args) {
// 实例化对象
// 根据无参构造器实例化对象
Constructor constructor = new Constructor();
// 根据有参构造器实例化对象
Constructor constructor1 = new Constructor("params1","params2");
// 调用方法并传递参数【值传递】
constructor.isUserName("this is data");
}
}
2、引用传递
引用传递:传递的是首地址
代码案例
package cn.com.example5;
public class Constructor1 {
public String username;
public String password;
public Constructor1(){}
public static void main(String[] args) {
Constructor1 con1 = new Constructor1();
Constructor1 con2 = con1;
Constructor1 con3 = new Constructor1();
System.out.println(con1 == con2); // true
System.out.println(con1 == con3); // false
}
}
四、this关键字
this关键字:代表是对象的引用,也就是this在指向一个对象,所指向的对象就是调用该方法的对象引用。【谁调用了该方法,那么该方法中的this就指向谁】
1、作用:this可以指向成员变量或方法
代码案例
package cn.com.example5;
public class ThisDemo {
public String username;
public String password;
public ThisDemo(){}
// 缺陷:调用者赋值时不能准确确定参数描述
/*public ThisDemo(String u,Stringp){
username = u;
password = p;
}*/
// 缺陷:参数username&password无法成功赋值给成员变量username&password【采用就近原则】
// 无法分清成员变量及局部变量
/*public ThisDemo(String username,String password){
username = username;
password = password;
}*/
// this.username:表示当前对象中的成员变量username
// this.password:表示当前对象中的成员变量password
public ThisDemo(String username,String password){
this.username = username;
this.password = password;
}
}
2、作用:this可以调用构造器
构造方法和普通方法不一样,无法像普通方法那样通过方法名调用,而需要this关键字进行调用
代码案例
package cn.com.example5;
public class ThisDemo {
public String username;
public String password;
public ThisDemo(){
// 调用有参构造器
this("admin","admin");
}
public ThisDemo(String username,String password){
this.username = username;
this.password = password;
}
public static void main(String[] args) {
ThisDemo thisDemo = new ThisDemo();
}
}
注意事项:this([参数])必须定义在第一行
五、static关键字
static:静态修饰符【共享】
根据一个类创建多个对象,那么对象中的属性及方法在对象间是不相关的,当属性或方法被static关键字修饰了,那么直接共享给多个对象【被static修饰的成员共享给多个对象】
不被static修饰的成员:实例成员
实例成员:实例变量、实例方法
实例变量:不被static修饰的成员变量
实例方法:不被static修饰的成员方法
被static修饰的成员:类成员
类成员:类变量、类方法
类变量:被static修饰的成员变量
类方法:被static修饰的成员方法
1、类成员共享
package cn.com.example5;
public class StaticDemo {
public String username = "username"; // 实例变量
public static String password = "password"; // 类变量
public static void main(String[] args) {
StaticDemo staticDemo = new StaticDemo();
System.out.println(staticDemo.username + staticDemo.password); // username password
staticDemo.username = "admin";
staticDemo.password = "admin";
System.out.println(staticDemo.username + staticDemo.password); // admin admin
StaticDemo staticDemo1 = new StaticDemo();
System.out.println(staticDemo1.username + staticDemo1.password); // username admin
}
}
注意事项:静态变量在加载到静态常量区之前会先查询一下该类变量是否存在,如果存在,直接使用,不存在则直接创建。
2、生命周期
类成员:随着类加载而加载【程序一旦运行,类成员只会执行一次】
实例成员:随着对象的创建而加载,随着对象的消失而消失
代码案例
package cn.com.example5;
public class StaticDemo1 {
public String username;
public static String password;
public void handlerMethod(){
// 调用属性
System.out.println(username);
System.out.println(password);
}
public static void handlerStaticMethod(){
// 调用属性
// System.out.println(username); 错误
System.out.println(password);
}
}
3、静态&非静态代码块
静态和非静态代码块在不需要调用的情况下自动执行,区别在于生命周期
静态代码块:类加载时执行
非静态代码块:对象创建时执行
代码案例
package cn.com.example5;
public class StaticDemo2 {
{
System.out.println("这是非静态代码块");
}
{
System.out.println("这是非静态代码块");
}
static {
System.out.println("这是静态代码块");
}
static {
System.out.println("这是静态代码块");
}
}
六、final关键字
final:修饰符,最终的
特点:
- 被final修饰的成员变量,值不能被改变【常量】
- 被final修饰的成员方法,不能被重写
- 被final修饰的类,不能被继承
代码案例
package cn.com.example5;
public final class FinalClass {
public final String USER_NAME = "admin";
public final void handlerMethod(){
}
}
- final、finally和finalize的区别
- final
- 修饰符,最终的
- 被final修饰的成员变量,值不能被改变(常量)
- 被final修饰的成员方法,不能被重写
- 被final修饰的类,不能被继承
- finally
- 必须和try-catch一起使用
- 不管有没有异常,finally中的代码块都会执行
- finalize
- 垃圾回收器
- 当对象不被引用时【未覆盖对象中的finalize方法】,回收该对象
- final