Java面向对象(OOP)基础

本文介绍了Java编程中的基础概念,包括方法的重载,如何通过不同的参数列表实现功能扩展;构造函数及其作用,无参和有参构造器的使用;参数传递的值传递和引用传递方式;this关键字的应用,如指向成员变量和调用构造器;static关键字的使用,强调其共享特性以及生命周期;最后讲解了final关键字的作用,包括常量、防止重写和阻止继承。通过实例代码加深理解。
摘要由CSDN通过智能技术生成

一、重载

当一个类中,某一个方法的功能不满足需求,并且必须使用该方法,那么我们可以对方法的方法体进行重新定义达到满足需求的目的,但是必须符合某种【重载】规范
可以用同一个方法名进行定义,根据参数类型或参数个数进行选择调用某个功能

方法的重载:方法名相同,参数类型和个数不同
定义的位置:本类中
方法间的关系:同级

代码案例

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:修饰符,最终的

特点:

  1. 被final修饰的成员变量,值不能被改变【常量】
  2. 被final修饰的成员方法,不能被重写
  3. 被final修饰的类,不能被继承

代码案例

package cn.com.example5;

public final class FinalClass {
    
    public final String USER_NAME = "admin";
    
    public final void handlerMethod(){
        
    }
}

  • final、finally和finalize的区别
    1. final
      • 修饰符,最终的
      • 被final修饰的成员变量,值不能被改变(常量)
      • 被final修饰的成员方法,不能被重写
      • 被final修饰的类,不能被继承
    2. finally
      • 必须和try-catch一起使用
      • 不管有没有异常,finally中的代码块都会执行
    3. finalize
      • 垃圾回收器
      • 当对象不被引用时【未覆盖对象中的finalize方法】,回收该对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘程云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值