04《JAVA从零到壹》第四讲:类与对象基础

举报
小虚竹 发表于 2022/10/29 16:57:10 2022/10/29
【摘要】 ❤️作者主页:小虚竹❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆❤️技术活,该赏❤️点赞 👍 收藏 ⭐再看,养成习惯 什么是对象和什么是类 对象万物皆对象,这些都是对象 对象的特征——属性属性——对象具有的各种特征每个对象的每个属性都拥有特定值例如:布兰尼和朱丽叶的体重不一样 对象的特征——方...

❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆

❤️技术活,该赏

❤️点赞 👍 收藏 ⭐再看,养成习惯

什么是对象和什么是类

对象

万物皆对象,这些都是对象

image-2022021796774

image-20220217950123

对象的特征——属性

  • 属性——对象具有的各种特征
  • 每个对象的每个属性都拥有特定值

例如:布兰尼和朱丽叶的体重不一样

image-20220217919468

对象的特征——方法

  • 方法——对象执行的操作

image-20220217926396

思考:法拉利对象的属性和方法有哪些?

image-20220217948509

属性

品牌:法拉利
型号:F360 Spider
颜色:黄色
价格:380万元

方法

发动

停止

加速

从对象抽象出“类”

抽取出下列对象的属性和方法的共同特征

image-20220217154115712

上面是豪车,可以抽象出“轿车”这个类

下面是美女顾客,可以抽象出“顾客”这个类

  • 类是模子,确定对象将会拥有的特征(属性)和行为(方法)

顾客类

轿车类

  • 类是具有相同属性和行为的一组对象的集合

汽车类

形状类

动物类

类与对象的关系

  • 类是具有共同属性和行为的对象的抽象
  • 类可以定义为数据和方法的集合
  • 类也称为模板,因为它们提供了对象的基本框架

image-20220217918557

创建对象及分配内存

创建对象

  • 要获得一个类的对象需要两步:
    • 你必须声明该类类型的一个变量,这个变量没有定义一个对象。实际上,它只是一个能够引用对象的简单变量。
    • 该声明要创建一个对象的实际的物理拷贝,并把对于该对象的引用赋给该变量。

Person p1;

p1=new Person();

Person p1=new Person();

代码初体验:

public class Person {
    private int age;
    private String name;
    private float height;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getHeight() {
        return height;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    public static void main(String[] args) throws Exception {
        Person p1 = new Person();
        System.out.println(p1);
    }
}


分配内存

  • p1=new Person();

//分配内存;内存结构如下图:
分配内存通过 关键字 ”new+类的构造方法();” 语句实现

IDEA断点查看内存结构:

image-20220217943471

类的定义

  • 类的严格定义及修饰符

[类的修饰符] class 类名称 [extends 父类名称][implements 接口名称列表]

{  

       变量定义及初始化;

       方法定义及方法体;

}
  • 类的修饰符:[public] [abstract | final] 缺省方式为 friendly

  • 类由两部分组成: 类的声明部分 “class 类名”;类体 “{ … }”;

例: class Person{ //类体内容 }

  • 注意点:
    • 关键字 class 小写
    • 类名需符合java标识符规定; 良好的编程规范一般 类名首字母大写; 类名要有意义(即见名识意)
  • 类体中包含属性(变量)的定义及方法(函数)的定义

变量的定义

  • 变量的定义及修饰符

    • [变量修饰符] 变量数据类型 变量名1,变量名2[=变量初值]…;
    • [public | protected | private ] [static] [final ] [transient ][volatile]
  • 成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。

  • 类体中变量分三类:

    • 实例成员变量;
    • 类(静态)成员变量;
    • 局部变量; 变量首字母一般小写;
  • 实例成员变量简称实例变量


class Person{ 
   String name;	
   int age;	
//…}

  • 类(静态)成员变量简称类变量或静态变量(共享性)
class Person{
    static String classer;
}
  • 局部变量
Class Person{
    public void speak(){
        String name;
    }
}

成员变量和局部变量

  • 类体中的变量分为两部分。变量定义部分所定义的变量称为类的成员变量,在方法体中定义的变量和方法的参数被称为局部变量。

  • 成员变量和局部变量的共同之处

    • 成员变量和局部变量的类型都可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型;引用类型:数组类型、对象。
    • 成员变量和局部变量的名字都必须符合标识符规定,名字如果使用拉丁字母,首写字母小写;如果多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。
  • 成员变量和局部变量的区别:成员变量在整个类内都有效,局部变量只在定义它的方法内有效。

变量的初始化

  • 成员变量如果没有赋初值,则会自动初始化。
数据类型 初值
boolean false
byte/short/int/long 0
float 0.0f
double 0.0d
char ‘\u0000’
对象类型 null
  • 局部变量必须赋初值,否则会在引用的地方报错。请记住这个! 请记住这个! 请记住这个!

方法的定义

  • 方法的定义及修饰字
    -[方法修饰符] 返回类型 方法名称(参数1,参数2,…) [throws exceptionList]
{(statements;)    //方法体:方法的内容
}
- [public | protected | private ] [static] [final | abstract] [native] [synchronized]
  • 返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。参数的类型可以是简单数据类型,也可以是引用数据类型(数组、类或接口),参数传递方式:简单数据类型是值传递,对象是引用传递。

方法分类

  • 按返回值分:
    • 有返回值
    • 无返回值 //VOID
  • 按参数分:
    • 无参数
    • 有参数(单个参数,多个参数) (了解形参与实参概念)
  • 按范围或功能分:
    • 实例方法;
    • 类方法;
    • 构造方法
      //new+构造方法()创建过程中,对构造方法相应的属性赋值

注:
如果没写构造方法,系统会默认给你一个无参构造方法

如果你写了构造方法,系统回收那个无参构造方法

代码初体验:
有返回值/无返回值的方法

public class Person1 {
    private int age=23;
    public static String classer = "一年八班";

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //有返回值
    private int sum(){
        return 1 + 1;
    }
    //无返回值
    private void speak(){
        System.out.println("Hello!");
    }


    public static void main(String[] args) throws Exception {
        Person1 p1 = new Person1();
        System.out.println("sum方法返回值为:"+p1.sum());
        p1.speak();
    }
}

image-20220217906903

代码初体验:
无参数/有参数的方法

public class Person2 {
    private int age=23;
    public static String classer = "一年八班";

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //无参数
    void speak(){
        System.out.println("Hello!");
    }
    void eat(){
        System.out.println("Hi!");
    }
    //有参数
    int abs(int a){
        if( a<0 ) {
            return -a;
        }
        else {
            return a;
        }
    }
    int sum(int a , int b){
        return a + b;
    }
    public static void main(String[] args) throws Exception {
        Person2 p1 = new Person2();
        p1.speak();
        p1.eat();
        System.out.println("abs方法有参数返回:"+p1.abs(-1));
        System.out.println("sum方法有参数返回:"+p1.sum(1,2));
    }
}

image-202202179003518

方法调用

上面两个代码示例,main方法里的,就是方法调用

  • 定义方法时在方法声明部分的括号中定义的变量为形式参数(即形参);
  • 调用时方法时需根据被方法的形参传入对应的实际参数(即实参)。

实例方法

  • 类体中方法分:实例成员方法; 类(静态)成员方法; 构造方法;方法首字母一般小写。
  • 实例成员方法简称实例方法
class Person{
    void speak(){
    System.out.println("一起学java");
    }
}

类方法

  • 类(静态)成员方法简称类方法或静态方法
class Person{
   static  void eat(){
    System.out.println("吃饭了");
    }
}
  • 构造方法;构造方法名与类名相同,构造方法无返回值也不需void关键字
class Person{
   Person(){
//一般是初始化操作.
}
}

构造方法

  • 每当创建给定类的实例时就调用的方法
  • 与类同名,但没有返回类型
  • Java 为对象分配内存,初始化实例变量时调用构造方法
  • 两种构造方法
    • 参数化构造方法
    • 隐式构造方法
      隐式构造方法的示例:
public class Person3 {
    private int age=23;
    public static String classer = "一年八班";

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) throws Exception {
        //隐式构造方法
        Person3 p1 ;
        p1 = new Person3();
    }
}

参数化构造方法的示例:

public class Person4 {
    private int age=23;
    public static String classer = "一年八班";

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person4(int age) {
        this.age = age;
        System.out.println("年龄是:"+age);
    }

    public static void main(String[] args) throws Exception {
        //隐式构造方法
        Person4 p1 ;
        p1 = new Person4(18);
    }
}

image-20220217912406

注意:

  • 在类中只包括变量的定义和方法的定义
  • 实例方法可以访问本类中的任何成员变量及任何成员方法; 类方法只能访问本类中的类成员变量及类成员方法;

方法重载

image-202202179729474
如图所示,方法重载就是要符合这两个条件

注意:方法返回值的类型不能用来区分重载的方法。不能通过两个方法的返回值的类型来区分它们。这是因为当你调用一个方法时,返回值的类型是不显示的。

代码初体验:

public class Person5 {
   

    int sum(int a , int b){
        return a + b;
    }

    int sum(int a , int b,int c){
        return a + b+c;
    }
    
}

错误示范:

public class Person5 {
   

    int sum(int a , int b){
        return a + b;
    }

    void sum(int a , int b){
        return a + b;
    }

    int sum(int a , int b,int c){
        return a + b+c;
    }
    
}

image-20220217938588

总结

  • 类与对象相关概念及关系
  • 创建对象及分配内存
  • 类的定义
    • 变量的定义
    • 方法的定义
    • 方法重载
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。