首页 > 其他分享 > 面向对象1

面向对象1

时间:2023-07-16 21:22:06浏览次数:51  
标签:int Student1 面向对象 对象 方法 public

面向对象1

一、Java面向对象学习的三条主线:(第4-6章)

1.Java类及类的成员:属性、方法、构造器﹔代码块、内部类

2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)

3.其它关键字:this、 super. static、final、abstract、interface、 package


面向过程(POP)与面向对象(OOP)

  • 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
  • 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

二、“人把大象装进冰箱”

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

  1. 把冰箱门打开
  2. 抬起大象,塞进冰箱
  3. 把冰箱门关闭

2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

人{
  打开(冰箱){
     冰箱.开开();
      }
  抬起(大象){
    大象.进入(冰箱);
    }
  关闭(冰箱){
     冰箱.闭合();
      }
}
=======
冰箱{
   开开(){}
   闭合(){}

}
======
大象{
  进入(冰箱){}
}

面向对象的思想概述

  • 程序员从面向过程的执行者转化成了面向对象的指挥者
  • 面向对象分析方法分析问题的思路和步骤:
    • 根据问题需要,选择问题所针对的现实世界中的实体。
    • 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
    • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
    • 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

一般具体操作是过程,名词是类


  • 类(Class)和对象(Object)是面向对象的核心概念。
  • 类是对一类事物的描述,是抽象的、概念上的定义
  • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
  • 面向对象程序设计的重点是类的设计
  • 设计类,就是设计类的成员。

属性=成员变量= field =域、字段

方法=成员方法=函数=method

image-20230716104635996

二、类和对象的使用(面向对象思想落地的实现):

  1. 创建类,设计类的成员
  2. 创建类的对象
  3. 通过对象.属性或对象.方法调用对象的结构

将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。

Person p3 = p1//地址值相同

image-20230716112413553

image-20230716113841900

类中属性的使用

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

1.相同点:

1.1定义变量的格式:数据类型 变量名=变量值

1.2先声明,后使用

1.3变量都有其对应的作用域

2.不同点:

2.1 在类中声明的位置的不同

  • 属性:直接定义在类的一对{}内
  • 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

2.2关于权限修饰符的不同

属性:可以在声明属性时,指明其权限,使用权限修饰符。

  • 常用的权限修饰符:private、public、缺省、protected
  • 目前,大家声明属性时,都使用缺省就可以了。(默认,可以不写)

局部变量:不可以使用权限修饰符。(相对于使用了方法的修饰符)

2.3默认初始化值的情况:

属性:类的属性,根据其类型,都有默认初始化值。

  • 整型(byte、 short、 int、 long) : 0
  • 浮点型(float. double) : 0.0
  • 字符型(char) :0 (或'\ue000')
  • 布尔型( boolean): false
  • 引用数据类型(类、数组、接口): null

局部变量:没有默认初始化值。

  • 意味着,我们在调用局部变量之前,一定要显式赋值。
  • 特别地:形参在调用时,我们赋值即可。
  • 00即在使用之前一定要赋值

2.4在内存中加载的位置:

属性:加载到堆空间中(非static)

局部变量:加载到栈空间


类中方法的声明和使用

  • 方法:描述类应该具有的功能。
  • 比如:Math类:sqrt( ) \ random() ...
    Scanner类: nextXxx() ...
    Arrays类: sort() \ binarySearch() \ toString() \ equals()

image-20230716165910227

2.方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}

3.说明:
3.1关于权限修饰符:

  • java规定的4种权限修饰符: private、public、缺省、protected

3.2返回值类型:有返回值Ms没有返回值

  • 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量。
  • 如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就;使用不使用return.但是,如果使用的话,只能“return;"表示结束此方法的意思。

3.2.2我们定义方法该不该有返回值?

  • 题目要求
  • 凭经验:具体问题具体分析

3.3 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

3.4 形参列表:方法可以声明0个,1个,或多个形参。

格式:数据类型1 形参1, 数据类型2 形参2,...

3.4.2 我们定义方法时,该不该定义形参?

  • 题目要求
  • 凭经验:具体问题具体分析

3.5方法体:方法功能的体现。


return关键字的使用:

1.使用范围:使用在方法体中

2.作用:

  • 结束方法
  • 针对于有返回值类型的方法,使用"return数据"方法返回所要的数据。

3.注意点:return关键字后面不可以声明执行语句。


5.方法的使用中,可以调用当前类的属性或方法

特殊的:方法A中又调用了方法A:递归方法。

方法中,不可以定义方法。

package com.xin.OOPTest;
/*
要求:
(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串studying”,调用showAge()方法显示age值,
调用addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。

 */
public class Person {
    String name;
    int age;
    /**
     * sex:1表明为男性
     * sex:0表明为女性
     */
    int sex;
    public void study(){
        System.out.println("studying");
    }
    public void showAge(){
        System.out.println("age:"+age);
    }

    /**
     *
     * @param i 为增加年龄
     * @return
     */
    public int addAge(int i){
        age+=i;
        return age;
    }
}
/*
 public static void main(String[] args) {
        Person person = new Person();
        person.name="tom";
        person.age=18;
        person.sex=1;
        person.study();
        person.showAge();//alt+左与右往返//ctrl+点击
        int newAge = person.addAge(5);
        System.out.println(person.name+"新年龄"+newAge);
        person.showAge();

        System.out.println("===========");
        Person person1 = new Person();
        person1.age=10;
        person1.showAge();
    }
 */

*4.对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。

问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1)生成随机数:Math.random(),返回值类型double;
2)四舍五入取整:Math.round( double d),返回值类型long。

package com.xin.OOPTest;

public class Student {
    public static void main(String[] args) {
        //声明一个Student类型数组  00数组
        Student1[] s = new Student1[20];
        for (int i = 0; i < s.length; i++) {
            //给数组元素赋值
            s[i] = new Student1();
            //给Student对象的属性赋值
            s[i].number=i+1;
            //年级
             s[i].state=(int)(Math.random()*6+1) ;
            //成绩
            s[i].score =(int)(Math.random()*(100+1));
        }
        //遍历
        for (int i = 0; i < 20; i++) {
            s[i].info();
        }

        System.out.println("===========");
        for (int i = 0; i < 20; i++) {
            if (s[i].state == 3) {
                s[i].info();
            }
        }
        System.out.println("===========");
        //冒泡排序成绩
        for (int i = 0; i < s.length-1; i++) {
            for (int j = 0; j < s.length-1-i; j++) {
                if (s[j].score>s[j+1].score){
                    //如果需要换序,交换的是Studengt对象
                    Student1 temp=s[j];//声明一个临时Student的对象
                    s[j]=s[j+1];
                    s[j+1]=temp;
                }
            }
        }
//遍历
        for (int i = 0; i < 20; i++) {
            s[i].info();
        }
    }
}
class Student1{
    int number;//学号
    int state;//年级
    int score;//成绩

    //显示学生信息方法
    public void info(){
        System.out.println("学号"+number + ", 年级" +state+ ", 成绩" + score);
    }
    }


此代码是对StudentTest.java的改进:将操作数组的功能封装到方法中

00000000000经典

package com.xin.OOPTest;

public class Student {
    public static void main(String[] args) {
        //声明一个Student类型数组  00数组
        Student1[] s = new Student1[20];//学生对象数组
        for (int i = 0; i < s.length; i++) {
            //给数组元素赋值
            s[i] = new Student1();
            //给Student对象的属性赋值
            s[i].number=i+1;
            //年级
             s[i].state=(int)(Math.random()*6+1) ;
            //成绩
            s[i].score =(int)(Math.random()*(100+1));
        }
        Student student = new Student();//主函数对象
        student.print(s);

        System.out.println("===========");
        //查找Studend1数组中指定的年级学生信息
        student.searchState(s,3);
        System.out.println("===========");
        //冒泡排序成绩
        student.sort(s);

    }
        //遍历
        public void print(Student1[] s){
            for (int i = 0; i < 20; i++) {
                s[i].info();
            }
        }

    /**
     * 查找Studend1数组中指定的年级学生信息
     * @param s 要查找的数组
     * @param state 要找的年级
     */
    public void searchState(Student1[] s,int state){
        for (int i = 0; i < 20; i++) {
            if (s[i].state == 3) {
                s[i].info();
            }
        }
    }

    /**
     * 给数组Student1排序
     * @param s Student1的对象
     */
    public void sort(Student1[] s){
        for (int i = 0; i < s.length-1; i++) {
            for (int j = 0; j < s.length-1-i; j++) {
                if (s[j].score>s[j+1].score){
                    //如果需要换序,交换的是Studengt对象
                    Student1 temp=s[j];//声明一个临时Student的对象
                    s[j]=s[j+1];
                    s[j+1]=temp;
                }
            }
        }
//遍历
        for (int i = 0; i < 20; i++) {
            s[i].info();
        }
    }
}
class Student1{
    int number;//学号
    int state;//年级
    int score;//成绩

    //显示学生信息方法
    public void info(){
        System.out.println("学号"+number + ", 年级" +state+ ", 成绩" + score);
    }
    }


标签:int,Student1,面向对象,对象,方法,public
From: https://www.cnblogs.com/xin-zhi-suo-xiang/p/17558599.html

相关文章

  • 面向对象编程(Object-Oriented Programming,OOP)
    面向对象编程(Object-OrientedProgramming,OOP)是一种编程思维方式和编码架构,是一种 对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。什么是对象:对象是客观存在的事物,可以说任何客观存在的都是可以成为对象,一台电脑,一直钢笔,一个人,一辆轿车等等,都可......
  • day07 7.1 Java中的面向对象之类与对象
    day077.1Java中的面向对象之类与对象【一】类与对象【1】类定义规范类与对象的关系类是实体对象的概念模型,笼统的,不具体的,比如人类、动物类、鸟类对象又称为实体,类具体化的表现小红/小明小猫一号/小狗一号对象中有属性,有方法不同对象属性是独有的方法是共......
  • 面向对象
    要想面向对象,操作对象,首先便要拥有对象;要创建对象,必须要先定义类,所谓的类可以理解为对象的模型;程序中可以根据类创建指定类型的对象;举例来说:可以通过Person类来创建人的对象,通过Dog类创建狗的对象,不同的类可以用来创建不同的对象;定义类class类名{属性名:类型;......
  • oracle pl/sql与lightdb plorasql面向对象支持
    虽说现在新系统pl/sql已经很少用了,但是在信创迁移过程中,仍然有很多oraclepl/sql过程、函数、包需要能够无缝的移植到信创数据库,比如在很多风控系统移植lightdb的过程中,就遇到了很多,甚至还有pro*c。所以才有了本文。--最常用,用于集合处理DECLARECURSORallrows_curISSELECT*......
  • Perl学习笔记1_面向对象语法
    perl面向对象没有什么特别的语法,以例子介绍如下.例子中涉及三个文件:main.pl,AllPerson.pm,Person.pm.其中:main.pl是主脚本,它要用到AllPerson.pm.AllPerson.pm是一个class,它要用到Person.pm.Person.pm是一个class,存储人员信息.main.pl#!/usr/bin/perlusestr......
  • 面向对象
    要想面向对象,操作对象,首先便要拥有对象;要创建对象,必须要先定义类,所谓的类可以理解为对象的模型;程序中可以根据类创建指定类型的对象;举例来说:可以通过Person类来创建人的对象,通过Dog类创建狗的对象,不同的类可以用来创建不同的对象;定义类class类名{属性名:类型;......
  • 面向对象 第三部分 继承和多态
    classAnimal(object):defrun(self):print('Animalisrunning...')classDog(Animal):defrun(self):#继承的好处:多态print('Dogisrunning...')defeat(self):print('Eatingmeat...')classCat(An......
  • 面向过程&面向对象
    面向过程&面向对象语言的进化发展跟生物的进化发展其实是一回事,都是”物以类聚”。相近的感光细胞聚到一起变成了我们的眼睛,相近的嗅觉细胞聚到一起变成了我们的鼻子。语句多了,我们将完成同样功能的相近的语句,聚到了一块儿,便于我们使用。于是,方法出现了!变量多了,我们将功能相近......
  • 面向对象之魔法方法
    什么是魔法方法?Python类中的魔法方法(MagicMethods)是特殊的方法,以双下划线(__)开头和结尾的方法。这些方法在对象的创建、运算符重载、属性访问等方面提供了特定的行为。都是内置方法,一般方法命名不建议使用这种格式即双下划线开头和结尾的方法__init__(self,...):构造函数,用于......
  • 面向对象基本概念
    什么是面向对象?一切皆对象,用面向对象的思想去编码,描述您的需求。 1.面向对象编程(Object-OrientedProgramming,简称OOP)是一种编程范式,它将数据和操作数据的方法封装在一个对象中。2.面向对象(Object-Oriented)是一种编程范式或方法论,它将数据和操作数据的方法封装在一个称为对......