JAVA基础day06: 面向对象——类、对象的创建和使用

面向对象(上)

(本人也是初学编程,结合B站尚硅谷的JAVA视频,谈谈自己的理解,如有错误,欢迎评论指正)

面向过程和面向对象

  • 面向过程编程,强调的是功能行为,以函数为最小单位,考虑怎么做

  • 而面向对象不同,强调的是具备了某些功能的对象,以类/对象为最小单位,考虑谁来做

JAVA的类和对象

类和对象的理解

  • 类(Class)和对象(Object)是面向对象的核心概念。

    • 类是对一类事物的描述,是抽象的、概念上的定义
    • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)
  • 比如:人会说话、唱歌、吃饭;

    • 这里的“人”,其实就是一个,他是抽象的概念,所有的人都会说话、唱歌、吃饭
    • 小明会说话、唱歌;这里的“小明”就是对象,是“人”这个类的实例化,或者叫类的对象

下面我们先快速创建一个类,并创建类的对象;文章后半段会详细讲解里面的知识。

类及类的创建

  • 类(class)的成员有:
    • 属性:对应类中的成员变量
    • 方法:对应类中的成员方法

格式:

权限修饰符 class 类名 {

    属性声明;

    方法声明;
}
说明:修饰符public:类可以被任意访问
     类的正文要用{}括起来

代码演示:

创建一个类

我们先创建一个Person类:

class Person {

}

好了!

类的属性的使用

然后我们往里面添加 属性

class Person {
    
//属性,或成员变量
    String name;//定义一个String型的name变量,但未赋值;
    int age = 25;//定义一个int型的age变量,赋值25;
}

人有姓名和年龄,所以我们在Person这个类中,定义了两个属性,name和age

类的方法的使用

  • 方法:描述类应该具有的功能。
    • 比如之前接触的Scanner类,用来接受用户键盘输入的nextXxx()方法。

方法的声明格式:

权限修饰符 返回值类型 方法名 (形参列表){
    方法体;
}

现在我们给Person类定义一些方法。

人有那些行为呢?会唱歌,会说话,所以:

class Person {
    
//属性,或成员变量
    String name;
    int age = 25;

//方法,或函数
    public void sing (String name){//定义一个String型的参数name,此处不必赋值,调用该方法时传入name参数值
//修饰符 返回值类型 方法名 (形参列表){
        System.out.println(name + "会唱歌。");
    }
    public String talk (String language) {
        return "会讲" + language;
    }

}

好了,整个Person类已经定义好了,但这只是个,是个抽象的概念;

在实际使用时,需要创建具体的对象(实例);
实际的应用场景,往往是指定的具体对象,比如具体是“谁”(小明?还是小红?),年龄是25岁,还会唱歌。

对象的创建和使用

还记得之前使用的Scanner类吗?用来接受用户键盘输入,我门当时是这么写的:

//new一个Scanner类的对象,命名为:scan
Scanner scan = new Scanner(System.in);
//再去调用方法:scan.方法()
int i = scan.nextInt();
  • 创建对象语法: 类名 对象名 = new 类名()
  • 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

上上个代码块,我们创建了一个Person类,现在我们创建一个Person类的对象(类的实例化)

//这是我们定义的Person类
class Person {
    **上一个代码块的内容;**
}

//具体使用
public class PersonTest {
    public static void main (String[] args) {
      
    //创建Person类的对象(类的实例化)
        Person p1 = new Person();//实例一个具体的人,变量名叫p1
        
        p1.name = "小明";//创建类时,name这个变量我们没有赋值,现在给name赋值

        System.out.println(p1.name);
        System.out.println(p1.age + "岁");//创建类时,age已赋值,直接调用

        p1.sing(p1.name);
        p1.talk("Chinese");
    }
}

输出:

小明
25岁
小明会唱歌。
会讲chinese
  • 在上面的代码块中,我们再创建一个对象p2
        Person p2 = new Person();
        
        p2.name = "小红";
        p2.age = 22;//此时,我们重新定义小红的age为22

        System.out.println(p2.name);
        System.out.println(p2.age);//同一个age,属于不同对象,有各自不同的值

        p2.sing(p2.name);
        p2.talk("English");

输出:

小明
25岁
小明会唱歌。
会讲Chinese
小红
22岁
小红会唱歌。
会讲English
  • 对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
  • 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象的属性a的值。

类的成员——属性的详解

下面,我们对上面创建类和对象的过程中的一些细节进行讲解。

属性(成员变量) 和 局部变量

  • 相同点

    • 定义变量的格式:数据类型 变量名 = 变量值
    • 必须先声明,后使用
    • 都有其对应的作用域
  • 不同点:

    • 在类中的声明位置不同
      • 属性直接定义在类的一对{}内
      • 局部变量声明在:方法内、方法形参、代码块内、构造器形参、构造器内部的变量
class Person {//这是一个类
    String name;//属性(成员变量),直接声明在类的{}内
    int age = 25;

//这是方法
    public void sing (String name){//name就是形参,name为局部变量
        System.out.println(name + "会唱歌。");
    }
    public void talk (String language) {
        String s = language      //s为局部变量
        System.out.println("会说" + s);
    }

}
  • 关于权限修饰符的不同

    • 属性:可以在声明属性时,指明其权限,使用权限修饰符(private、public、protected、缺省)
    • 局部变量:不可使用权限修饰符号
  • 默认初始化值的情况:

    • 属性:类的属性,根据其类型,有对应的默认初始化值。(整型为0,浮点型为0.0,字符型为0或’\u0000’,布尔型为false,引用数据类型为null)
    • 局部变量:没有默认值,必须先赋值。特别的:形参在调用时赋值就可以了。

类的成员——方法的详解

先看我们之前定义的Person类的方法:

方法的声明格式

权限修饰符 返回值类型 方法名 (形参列表){
    方法体;
}
//方法
    public  void   sing(String name){
  //修饰符 返回值类型 方法名(形参列表){

        System.out.println(name + "会唱歌。");
        //方法体
    }

权限修饰符

  • 关于权限修饰符
    • 默认方法的权限修饰符使用public
    • Java规定的4种权限修饰符:private、public、缺省、protected -->讲到封装性再细说

返回值类型

  • 返回值类型: 有返回值 vs 没有返回值

    • 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return 数据”。
    //类中定义:
    public String talk(String language){
          return "会讲" + language;
      }
    //......................................
    //实例中调用
    p1.talk("Chinese");
    //注意,只是这样写,不会打印“小明会讲Chinese”,这句代码只是一个“值”,是return返回的值。
    
    String info = p1.talk("Chinese");
    System.out.println(info);
    //打印:小明会讲Chinese
    
    
    • 如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思。
  • 方法名

    • 属于标识符,遵循标识符的规则和规范,“见名知意”

定义多个形参

  • 形参列表
    • 方法可以声明0个,1个,或多个形参,格式:数据类型1 形参1,数据类型2 形参2,…
    • 例如:(String name,int age)
    //类中定义:
    public String birthday (String month,int day){//多个形参
          return "生日是:" + month + "月," + day + "日";
      }
    //.........................................
    //实例中调用:
          String birth = p1.birthday("九",24);//传入两个对应类型的参数
          System.out.println(birth);
    
    输出:
    生日是:九月,24日
    

return关键字的使用

  • return关键字的使用:
    • 使用范围:使用在方法体中
    • 作用:① 结束方法; ② 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据
    • 注意:return关键字后面不可以声明执行语句,因为不会执行。

拓展:递归方法

  • 方法A中可以调用方法B;也可以调用方法A本身:递归方法。
  • 但是方法中,不可以再嵌套定义方法。
public void func1(){
    方法体;
}

public void func2(){
    func1();//调用另一个方法
    func2();//调用自身:递归
}

//错误示范
public void func3(){
    public void func4(){}
}
  • 注意:使用递归方法时,注意终止条件,否则容易无限循环

例题:用面向对象的方法设计一个程序

接受用户输入m和n,打印m行n列的“*”矩阵,并输出矩阵的面积。

文件名为:mnArraytest.java

import java.util.Scanner;
//先定义类
class mnArray {
    
    public int method(int m,int n){

        for (int i = 0;i < m;i++) {
            for (int j = 0;j < n;j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
        return m * n;
    }

}
//**********************************************
public class mnArraytest {
    public static void main (String[] args) {
        mnArray a1 = new mnArray();//类的实例化

        Scanner scan = new Scanner(System.in);
        System.out.print("请输入行数:");
        int hang = scan.nextInt();

        System.out.print("请输入列数:");
        int lie = scan.nextInt();

        System.out.println("面积为:" + a1.method(hang,lie));//a1.method()调用对象a1的method方法
    }
}
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值