Java之理解类和对象

编程的本质是逻辑,编程思维的培养很重要。首先我们要理解面向过程和面向对象有什么区别:
面向过程:
面向过程是一种以“事件”为中心的编程思想,把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。需要实现一个功能的时候,看重的是开发的步骤和过程,
面向对象:
面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。
当需要实现一个功能的时候,看重的并不是过程和步骤,而是关心的是对象,对象能做什么。

面向对象和面向过程最本质的区别在于考虑问题的出发点不同,面向过程是以事件流程为考虑问题的出发点,而面向对象则是以对象为考虑问题的出发点。
面向对象程序设计中代码间的相关性低(低耦合特性),使得代码很容易被复用和扩展,面向对象开发的程序一般更易维护、易复用、易扩展。面向过程的代码重用性低、扩展能力差。

现在主流的思想是面向对象,而实际的情况是软件设计的宏观层面是面向对象的,微观层面依然是面向过程的(方法内部的代码还是按照步骤编写的)。

※面向对象程序设计(Object Oriented Programming,OPP):

面向对象三大特性:
1.封装2.继承3.多态

1.对象

1.1.什么是对象

万事万物皆对象,对象强调的是一个具体的个体,例如:杨树就不是对象,我家门前第一颗杨树就是对象。

1.2.对象由什么构成

对象由状态行为构成。
对象的状态是指对象的数据,对象的状态由变量表示,也叫对象的属性。
对象的行为是指对象的功能,对象的行为由方法表示。

1.3.对象是怎么创建的

对象是由类实例化时创建的,因此创建对象必须先定义类。

2.类

2.1.什么是类

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

2.2.类的构成

类是由属性和方法构成的。

※类和对象是什么关系

类和对象的关系就如同模具和用这个模具制作出来的物品之间的关系。
一个类给出它的全部对象的一个统一的定义,而它的每个对象则是符合这种定义的一个实体(也称作实例),因此类和对象的关系就是抽象和具体的关系。
类是对象的模板,对象是类的的具体实例。类中定义了什么属性和方法,由这个类实例化的对象就有什么属性和方法。
类是一次性定义,对象可以多次创建。

  • 类是对某一类事物的抽象描述,不是具体的个体。
  • 对象是对某一事物的具体描述,是具体的个。

3.定义类

3.1.定义类的语法格式

public class 类名 {
    成员变量声明;//即属性
    成员方法声明;//即行为
}

具体:

public class 类名 {
    //可编写0至n个属性
    数据类型 变量名1;
    数据类型 变量名2;
    
    //可编写0至n个方法
    修饰符 返回值类型 方法名(参数){
        执行语句;
    }
}

注意:
● class是声明类的关键字
● public类的类名必须和类所在文件的文件名一致
●如果不是public类,那么类名与类所在的文件名可以不一致
●类名的命名规范是:帕斯卡命名法,因此类名首字母大写。
示例:

public class Student {
    //类的属性(类的状态)
    String name; 
    int score;
    String no;
    //类的方法(类的行为)
    public void play(){
        System.out.printf("我的名字是%s,我的成绩是%d,我的学号是%s",name,score,no);
    }
}

4.实例化对象

通过类创建对象的过程称为类的实例化。实例化的结果是产生了一个实例,实例也叫对象。

4.1.创建对象(实例化对象)

一个对象称为类的一个实例,是类一次实例化的结果。
创建对象的语法格式

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

示例:

Student s1 =new Student();
Student s2 =new Student();

1.new是关键词,称为实例化,同时也是分配内存的意思。
2.左边的类名为对象的数据类型。
3.右边的类名()称为类的构造方法。

一个对象由两部分构成,一个是对象的指针(也称对象的引用),二是对象的实例。
内存分配演示

内存图

4.2.使用对象

对象调用属性和方法是使用成员运算符"."来完成的。
使用对象的语法格式

   对象名.属性   //引用对象的属性
   对象名.方法名  //引用对象的方法

4.2.1.对象调用属性

public class Student {
    String name;
    int score;
    String no;

    public static void main(String[] args) {
        Practice s1 = new Practice();
        s1.name = "haha";
        s1.score = 78;

        Practice s2 = new Practice();
        s2.name = "yaya";
        s2.score = 98;
    }
}
内存图

4.2.2.对象调用方法

public class  Student {
    String name;
    int score;
    String no;
    public void play(){
        System.out.printf("我的名字是%s,我的成绩是%d,我的学号是%s",name,score,no);
    }

    public static void main(String[] args) {
        Student s1 = new  Student();
        s1.name = "haha";
        s1.score = 78;
        s1.play();

        Student s2 = new  Student();
        s2.name = "yaya";
        s2.score = 98;
        s2.play();
    }

运行结果:

我的名字是haha,我的成绩是78,我的学号是null
我的名字是yaya,我的成绩是98,我的学号是null

4.2.3.对象数组

示例:
需求:
1.班级里有5名学生,输入每名学生的姓名和总成绩。
2.根据学生总成绩从高到低排名,显示学生名次、姓名、总成绩。
分析:
1.有哪些对象?有学生对象,有班级对象
2.对象有什么属性和方法?
①.学生有姓名,成绩的属性,学生不需要方法
②.班级有多名学生的属性,班级有排序方法,输出的方法
代码:
1:创建学生类

public class Student {
    //属性
    String name;
    int score;
    //构造
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

2.创建班级类

public class ClassInfo {
    //属性
    Student []stus = null;

    //构造函数初始化班级大小
    public ClassInfo(int size){
        this.stus = new Student[size];
    }

    //排序方法
    public void sort(){
        if(this.stus.length==0){
            return;
        }
        for (int i = 0; i < this.stus.length-1; i++) {
            for (int j = 0; j < this.stus.length - i - 1; j++) {
                if(this.stus[j].score<this.stus[j+1].score){
                    Student temp = this.stus[j];
                    this.stus[j] = this.stus[j+1];
                    this.stus[j+1] = temp;
                }
            }
        }
    }

    //输出方法
    public void print(){
        for (int i = 0; i < stus.length; i++) {
            System.out.printf("姓名:%s,成绩%d,名次:%d",stus[i].name,stus[i].score,(i+1));
            System.out.println();
        }
    }
}

3.创建测试类

public class Test {
    public static void main(String[] args) {
        //1:创建5个学生
        Student s1 = new Student("学生1",60);
        Student s2 = new Student("学生2",80);
        Student s3 = new Student("学生3",90);
        Student s4 = new Student("学生4",65);
        Student s5 = new Student("学生5",70);

        //2:创建班级
        ClassInfo classInfo = new ClassInfo(5);
        classInfo.stus[0] = s1;
        classInfo.stus[1] = s2;
        classInfo.stus[2] = s3;
        classInfo.stus[3] = s4;
        classInfo.stus[4] = s5;

        //3:排序
        classInfo.sort();

        //4:输出
        classInfo.print();
    }
}

运行结果:

姓名:学生3,成绩90,名次:1
姓名:学生2,成绩80,名次:2
姓名:学生5,成绩70,名次:3
姓名:学生4,成绩65,名次:4
姓名:学生1,成绩60,名次:5

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容