面向对象day01

面向对象

面向对象三大特征:封装、继承、多态

类:具有相同的状态和相同的行为的一组对象的集合

对象:真实存在的具体个体

类与对象的关系:抽象和具体,对象是类的一个实例,类是多个对象进行综合抽象的结果,是实体对象的概念模型

定义类

[修饰符] class 类名{

成员变量; //类的字段

成员方法; //类的行为

}

一个类中只能含有一个public修饰的类,且类名要与文件名相同

类的字段:类的属性

[修饰符] 数据类型 字段名;

类的方法:类的行为

创建对象

类名 对象名 = new 类名();

  • 类名为对象的数据类型

  • new 为实例化

  • 类名() 构造方法

对象的字段不赋值,会默认对应的值

对象的指针分配在栈中,对象的实例分配在堆中,对象有多少属性就分配多大内存

成员变量:

类的字段直接定义在类的内部,方法的外部的变量,为成员变量

局部变量:定义在方法的内部

成员变量与局部变量的区别:

  • 作用域不同:局部变量仅在定义它的方法内部使用,成员变量可以在整个类中使用

  • 初始值不同:局部变量没有赋值时,java不会赋值,因此在使用前必须初始化,成员变量在类中定义时没有赋值,java会给他默认的初始值

  • 在同一个方法中不允许有同名的局部变量

  • 在一个类中,局部变量名可以与成员变量名相同,且在使用时局部变量有更高的优先级

构造方法:

生成实例对象的唯一方法

与类名相同,没有返回值

作用:为成员变量初始化

在类中没有定义构造方法,系统会默认创建一个无参构造,该构造方法没有参数和方法体,生成对象的属性值也为零或空,若定义构造方法,系统会自动屏蔽掉无参构造方法,构造方法不能继承

所以在定义时,最好无参构造和带参构造都定义

定义:

[访问修饰符] 方法名([参数列表]){

//方法体

}

构造方法与方法的区别:

  • 构造方法在定义时,无返回值类型,无返回值,方法可以有返回值

  • 构造方法方法名必须与类名相同,方法的方法名只需遵循标识符命名规则

  • 构造方法在调用时,要创建对象,使用new 方法名(参数列表),方法在调用时,方法名(参数列表)

无参构造与带参构造区别:

在进行初始化时,带参构造会直接把值赋值给对应字段

无参构造需要调用对应字段进行赋值,不赋值,默认为该字段的初始值

public class Person {
    //面向对象
    String name;
    String gender;
    int age;
    public void sleep(){
        System.out.println(name + "睡觉");
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void play(){
        System.out.println("玩游戏");
    }
    public void play(String name,int age){
        this.name = name;
        this.age  = age;
    }
    public Person(String name,int age){ //带参构造
        this.name = name;
        this.age = age;
    }
    public Person(){ //空参构造
​
    }
​
    public static void main(String[] args){
        Person p = new Person(); //空参构造
        p.eat();
        p.sleep(); //没有赋值,默认为数据初始值
        p.name = "张三";
        p.sleep();
        Person p1 = new Person("李四",20); //带参构造
        System.out.println(p1.name);
        System.out.println(p1.age);
    }
}

this关键字

this关键字是对一个对象的默认引用。

使用场景:

  • 使用this调用成员变量,解决成员变量与局部变量同名问题,成员变量与局部变量同名,this.字段名表示成员变量,字段名表示局部变量;局部变量与成员变量不同名时,this可省略

  • 使用this调用成员方法,this可省略

  • this调用重载的构造方法,只能在构造方法使用,且必须是构造方法的第一条语句,这是因为在创建对象时,必须首先初始化对象的状态,然后才能进行其他操作。this() 表示构造方法,里面的参数对应构造方法的参数

public class Person {
    private String name;
    private int age;
    // 构造方法1:接收名字和年龄
    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }
​
    // 构造方法2:接收名字,默认年龄为0
    public Person(String name) {
        this(name, 0); // 调用构造方法1
    }
​
    // 构造方法3:无参构造方法
    public Person() {
        this("Unknown", 0); // 调用构造方法1
    }
​
    // 其他成员方法...
}

快速排序

首先,定义一个基准数,给定两个起始值,一个从最左边开始,一个从最右边开始

若左边索引不等于右边索引,先从最右边开始向左边找,找到小于基数的跳出循环,左边向右找,找到比基数大的,跳出循环,若左边的值小于右边的值,两个数交换位置,

若左边索引等于右边索引,将索引与基数比较,小于基数,交换位置

使用递归

若左边数据大于等于右边数据,递归结束

public static void main(String[] args) {
​
        int[] arr = {3, 2, 6, 4, 27, 7};
    
        quickSort(arr, 0, arr.length - 1);
    
        for (int i = 0; i < arr.length; i++) {
    
            System.out.print(arr[i] + " ");
    
        }
    
    }
    
    public static void quickSort(int[] arr,int start,int end){
    
        if (start >= end){ //递归结束条件
    
            return;
    
        }
    
        int i = start;
    
        int j = end;
    
        int current = arr[i];
    
        while (i != j){
       
            //找出比基数小的
            while (j > i && arr[j] >= current){
    
                j--;
    
            }
            //找出比基数大的
            while (j > i && arr[i] <= current){
    
                i++;
    
            }
    
            if(i < j){
    
                arr[i] = arr[i] ^ arr[j];
    
                arr[j] = arr[i] ^ arr[j];
    
                arr[i] = arr[i] ^ arr[j];
    
            }
    
        }
    
        if(arr[i] < current){
    
            arr[start] = arr[i];
    
            arr[i] = current;
    
        }
​
        //调用自身
        quickSort(arr,start,i - 1);
    
        quickSort(arr,i + 1,end);
​
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值