1

1436141288

V1

2022/03/13阅读:19主题:全栈蓝

面向对象基础

类和对象

1.1类和对象的 理解

万物皆对象相信大家都听过,所以我们说客观存在的事物皆为对象。

    • 类的理解
      • 类是对现实事物的一种描述
      • 类是对生活中一类具有共同属性和行为的事物的抽象
    • 类的组成
      • 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸) 内质
      • 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)_动作_
  • 类和对象的关系

    • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象
    • 对象:是能够看得到摸的着的真实存在的实体
    • 简单理解: 类是对事物的一种描述,对象则为具体存在的事物

1.2类的应用(与方法的区别)

类的组成是由 属性行为 两部分组成

  • 属性:在类中通过成员变量来体现(类中方法外的变量)
  • 行为:在类中通过成员方法来体现( 和前面的方法相比去掉static关键字即可

类的定义步骤:(个人觉得和写方法差不多,只要会了方法,写写类和对象就简单多了)

①定义类

②编写类的成员变量

③编写类的成员方法

public class 类名 {
// 成员变量
变量1的数据类型 变量1
变量2的数据类型 变量2;

// 成员方法
方法1;
方法2;
}

示例代码:

/*
手机类:
类名:
手机(Phone)
成员变量:
品牌(brand)
价格(price)
成员方法:
打电话(call)
发短信(sendMessage)
*/

public class Phone {
//成员变量
String brand;
int price;
//成员方法
public void call() {
System.out.println("打电话");
}
public void sendMessage() {
System.out.println("发短信");
}
}

1.2.1补充:成员变量和局部变量

这里顺便说一下 成员变量 和 _局部变量_:

类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上) 内存中位置不同:成员变量(堆内存)局部变量(栈内存) 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失) 局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失) 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)

这个是摘录自黑马程序员的解释 简单来说,局部就是适用范围较大,成员变量就是适用范围最小的一个。

1.3对象的使用 应用

  • 创建对象的格式:
    • 类名 对象名 = new 类名();
  • 调用成员的格式:
    • 对象名.成员变量
    • 对象名.成员方法();

其实本质都是构造方法和对方法的使用 同样给大家举个例子

/*
创建对象
格式:类名 对象名 = new 类名();
范例:Phone p = new Phone();
使用对象
1:使用成员变量
格式:对象名.变量名
范例:p.brand
2:使用成员方法
格式:对象名.方法名()
范例:p.call()
和最早学习的创建方法(个人喜欢称之为函数)的区别不大
*/

public class PhoneDemo {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//使用成员变量
System.out.println(p.brand);
System.out.println(p.price);
p.brand = "魅族";
p.price = 4599;
System.out.println(p.brand);
System.out.println(p.price);
//使用成员方法
p.call();
p.sendMessage();
//p.call和p.sendMessage创建在1.2章节
}
}

封装

2.1 private关键字

先给大家贴一张private的英文解释 我们只需要知道他是私有的意思就行了 private作为一个权限修饰符,可以用来修饰成员(成员变量,成员方法)

  • 其中,当成员被private修饰的时候,只能在本类中被访问,如果其它类要使用,就需要Getter and Setter方法
    • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
    • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
  public class Student {
    private String sid;
    private String name;
    private String age;
    private String address;
//这是构造方法
    public Student(String sid, String name, String age, String address) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.address = address;
    }
    public Student() {
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

就比如这样一段代码,他有4个private修饰的成员变量,当我们需要在其他类中使用他们的时候,就需要成对出现的get和set方法,以及构造方法(后面点说)。

2.2this关键字的使用

先请大家看下面的一段代码

public class Student {
private String name;
public void setName(String name) {
name = name;
}
public String getName() {
return name;
}

相信大家发现了,我写了一个name=name; 我原本的意思,是想让传入的参数name赋值给局部变量name,但是直接写name=name,其实传入的参数是没有用到的,那么当我想让局部变量的name=传入参数的name,我就需要使用到this关键字

public class Student {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}

构造方法

3.1 构造方法是个啥

Scanner sc = new Scanner(System.in);

这个代码相信大家斗再眼熟不过了吧,这个就是一个构造方法,括号里面呢,就是一个参数的引用,如果为空,那么就是无参数的构造方法。

  • 构造方法的创建
    • 如果没有定义构造方法,系统将给出一个默认的无参数构造方法 如果定义了构造方法,系统将不再提供默认的构造方法 那么如果你自定义了一个带参数的构造方法,系统就不再默认提供一个无参的构造方法,这个时候就需要自己手写一个 推荐无论是否使用,都写上无参的构造方法

这个是无参和有参两种构造方法都使用的案例,我们分别写了无参,带有name这个参数,带有age这个参数和name,age两个参数都带的构造方法。

/*
学生类
*/

class Student {
private String name;
private int age;
public Student() {}
public Student(String name) {
this.name = name;
}
public Student(int age) {
this.age = age;
}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println(name + "," + age);
}
}
/*
测试类
*/

public class StudentDemo {
public static void main(String[] args) {
//创建对象
Student s1 = new Student();
s1.show();
//public Student(String name)
Student s2 = new Student("武大郎");
s2.show();
//public Student(int age)
Student s3 = new Student(30);
s3.show();
//public Student(String name,int age)
Student s4 = new Student("武二郎",30);
s4.show();
}
}

可变参数

我个人理解,可变参数其实和泛型差不多的意义。 变长参数是 Java 的一个语法糖,本质上还是基于数组的实现

void foo(String... args);
void foo(String[] args);

这样的两行代码本质差不多

public void foo(String...varargs){}

foo("arg1""arg2""arg3");

//上述过程和下面的调用是等价的
foo(new String[]{"arg1""arg2""arg3"});

分类:

后端

标签:

Java

作者介绍

1
1436141288
V1