day07面向对象复习+课后练习

第一部分:面向对象上

两个要素:类和对象

  • 类是对一类事物的描述,是抽象的、概念上的定义
  • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。

创建Java自定义类

步骤:

  • 定义类(考虑修饰符、类名)
  • 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
  • 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)

类的结构:属性和方法

类的成员之一:属性

### 变量的分类:成员变量与局部变量

类和对象的创建

  • 创建对象语法: 类名 对象名 = new 类名();
  • 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

对象的创建和使用:匿名对象

我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。

使用情况

  • 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
  • 我们经常将匿名对象作为实参传递给一个方法调用。

类的访问机制:

  • 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。 (例外:static方法访问非static,编译不通过。)
  • 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中 定义的成员

成员变量(属性)和局部变量的区别

对象的内存解析

  • 堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象 实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的
    对象实例以及数组都要在堆上分配。

  • 通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。

  • 局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、
    long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。

  • 方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

方法举例与声明的格式

什么是方法(method、函数):

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中 也称为函数或过程。
  • 将功能封装为方法的目的是,可以实现代码重用,简化代码
  • Java里的方法不能独立存在,所有的方法必须定义在类里。

![](https://img-blog.csdnimg.cn/img_convert/a12b1715469f367bfe2621a21af9e4f1.png

方法的分类:按照是否有形参及返回值

方法使用中的注意点

  • 如果方法有返回值,则必须在方法声明时,指定返回值类型,同时方法中需要使用return关键字来返回指定类型的变量或者常量
  • 方法被调用一次,就会执行一次
  • 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可 以不必使用return语句。如果使用,仅用来结束方法。
  • 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
  • 方法中只能调用方法或属性,不可以在方法内部定义方法

课后练习 1:类的设计

定义Person类
package demo04;
public class Person {String name;int age;String  sex;public void study(){System.out.println("studying");}public void showAge(){System.out.println("age:"+age);}public int addAge(int  i){age+=i;return  age;}
}
定义测试类
package demo04;
/*要求:(1)创建Person类的对象,设置该对象的name、
age和sex属性,调用study方法,输出字符串
“studying”,调用showAge()方法显示age值,调用
addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的
不同对象之间的关系*/
public class PersonTest {public static void main(String[] args) {Person p1=new Person();p1.name="黄景瑜";p1.age=29;p1.sex="男";p1.study();p1.showAge();int newAge=p1.addAge(2);System.out.println(p1.name+"的新年龄为:"+newAge);System.out.println(p1.age);//20}
}
代码运行结果:
studying
age:29
黄景瑜的新年龄为:31
31

2.利用面向对象的编程方法,设计类Circle计算圆的面积。

**方式一:无返回值**
package com.atguigu.exer;
/*
利用面向对象的编程方法,设计类Circle计算圆的面积。
*/
public class CircleTest {public static void main(String[] args) {Circle c1=new Circle();c1.radius=5.6;double area=c1.findArea();System.out.println(area);}
}//圆class Circle{//属性(半径)double radius;//求圆的面积public double findArea(){double area =Math.PI*radius*radius;return  area;}
}

3.打印矩形面积

package com.atguigu.exer;
/*
1.编写程序,声明一个method方法,在方法中打印一个10*8 的*型矩形,
在main方法中调用该方法。
2.修改上一个程序,在method方法中,除打印一个10*8的*型矩形外,再
计算该矩形的面积,并将其作为
方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
3.修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n
的*型矩形,并计算该矩形的面积, 将其作为方法返回值。在main方法中调
用该方法,接收返回的面积值并打印*/
public class Exer3Test {public static void main(String[] args) {Exer3Test test =new Exer3Test();
//        test.method();
//        test.method();
//        System.out.println(test.method());int area=test.method(12,5);System.out.println((area));
//        System.out.println(test.method(12,5));}//第一步:打印矩形//    public void method(){//        for (int i = 0; i < 10; i++) {//            for (int j = 0; j < 8; j++) {//                System.out.print("*");
//            }
//            System.out.println();
//        }
//    }
//    public int method(){//        for (int i = 0; i < 10; i++) {//            for (int j = 0; j < 8; j++) {//                System.out.print("*");
//            }
//            System.out.println();
//        }
//        return 8*10;
//    }public int method(int m,int n){for (int i = 0; i < 10; i++) {for (int j = 0; j < 8; j++) {System.out.print("*");}System.out.println();}return m*n;}
}

课后练习 2:对象数组

定义类Student,包含三个属性:学号number(int),年级state(int),成绩
score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:

  1. 生成随机数:Math.random(),返回值类型double;
  2. 四舍五入取整:Math.round(double d),返回值类型long。
    5.声明一个日期类型MyDate:有属性:年year,月month,日day。创建2个日期
    对象,分别赋值为:你的出生日期,你对象的出生日期,并显示信息。

课后练习 3:对象数组的改进

package com.atguigu.exer;
/*定义类Student,包含三个属性:学号number(int),年级state(int),成绩
score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1) 生成随机数:Math.random(),返回值类型double;
2) 四舍五入取整:Math.round(double d),返回值类型long。
5.声明一个日期类型MyDate:有属性:年year,月month,日day。创建2个日期
对象,分别赋值为:你的出生日期,你对象的出生日期,并显示信息。*/public class StudentTest {public static void main(String[] args) {//声明Student类型的数组Student1[] stus=new Student1[20];for (int i = 0; i < 20; i++) {//给数组元素赋值stus[i]=new Student1();//给Stuent对象的属性赋值stus[i].number=(i+1);//年级:[1,6]stus[i].state=(int)(Math.random()*(6-1+1)+1);//成绩stus[i].score=(int)(Math.random()*(100-0+1));}StudentTest test =new StudentTest();//遍历学生数组test.print(stus);System.out.println("**********************");//state=3test.searchState(stus,3);System.out.println("++++++++++++++++++++");test.sort(stus);}//遍历Student1[]数组操作public void print(Student1[] stus){for (int i = 0; i < stus.length; i++) {//            System.out.println(stus[i].number+","+stus[i].state
//            +","+stus[i].score);System.out.println(stus[i].info());}}public void searchState(Student1[] stus,int atate){for (int i = 0; i < stus.length; i++) {if(stus[i].state==3){System.out.println(stus[i].info());}}}public void sort(Student1[] stus){for (int i = 0; i < stus.length - 1; i++) {for (int j = 0;  j < stus.length-1-i;  j++) {if(stus[j].score>stus[j+1].score){//如果选用换序,交换的是数组中的元素student对象Student1 temp=stus[j];stus[j]=stus[j+1];stus[j+1]=temp;}}}}}
class Student1 {int number;//学号int state;//年级int score;//成绩//显示学生信息的方法public String info(){return "学号"+number+"年级"+state+"分数"+score;}}

运行结果

学号1年级3分数69
学号2年级4分数11
学号3年级3分数70
学号4年级4分数71
学号5年级4分数66
学号6年级4分数9
学号7年级5分数18
学号8年级2分数63
学号9年级4分数30
学号10年级2分数70
学号11年级2分数53
学号12年级3分数39
学号13年级2分数37
学号14年级1分数30
学号15年级5分数71
学号16年级6分数23
学号17年级6分数33
学号18年级2分数5
学号19年级2分数40
学号20年级3分数63
**********************
学号1年级3分数69
学号3年级3分数70
学号12年级3分数39
学号20年级3分数63
++++++++++++++++++++Process finished with exit code 0

day07面向对象复习+课后练习相关推荐

  1. day07 c++复习 核心编程02 核心内容(1、友元 2、3、继承 )

    目录 全局函数做友元 类做友元 成员函数做友元 下一章是运算符重载,这章太难了,而且重要,单独出一版 继承 继承的基本语法 派生类中的成员,包含两大部分: 继承方式 继承中的对象模型 继承中构造和析构 ...

  2. 小汤学编程之JAVA基础day07——面向对象(二):封装、继承与多态

    一.封装 1.使用步骤      2.优点     3.包结构     4.访问修饰符 二.继承 1.理解      2.重写     3.final的详解     4.防止被继承的两种方法 三.多态 ...

  3. [Python]小甲鱼Python视频第037课(类和对象:面向对象编程 )课后题及参考解答

    # -*- coding: utf-8 -*- """ Created on Mon Mar 11 20:09:54 2019@author: Administrator ...

  4. 软件工程教程:第9章面向对象分析 课后习题

    <软件工程教程>(第2版)主编:吴迪 马宏茹 丁万宁 电子科技大学出版社 目录 一.选择题 二.简答题 (1)简述O0A模型的层次结构. (2)简述面向对象分析方法(OOA)的五个基本步骤 ...

  5. python我想对你说_python学习第20天----面向对象复习、__repr__

    1.面向对象 #问题: ①写代码时,什么时候用面向对象:处理比较复杂的角色之间的关系(代码量大,功能多的时候),如复杂的电商程序.公司/学校的人事管理的系统:提高代码的可读性,清晰度(无论是开发者还是 ...

  6. 计算机网络第六版——第二章复习+课后答案

    总结:讲述了应用层协议原理-- 转载于:https://www.cnblogs.com/dugudongfangshuo/p/9209470.html

  7. java面向对象程序设计课后答案苏守宝,完整版开放下载

    阿里P8级架构师核心理论落地篇 再造淘宝,贯穿全系,阿里团队代码落地,详细每个版本迭代,拒绝2-3个月PPT架构师 再造淘宝之咚宝-技术支撑-完整搭建DevOps 再造淘宝之咚宝-统一规则-代码规范落 ...

  8. 第五章 面向对象——多态 课后作业:

    1.编码创建一个打印机类Printer,定义抽象方法print( );创建俩个子类,即针式打印机类DotMatrixPrinter和喷墨打印机类InkpetPringter,并在各自类中重写方法pri ...

  9. 山东大学服务开发技术期末复习

    山东大学服务开发技术期末复习 课后习题 section 1 1.1 请简要论述为什么引入软件服务?1.2 简述 W3C 定义的 Web 服务技术栈主要组成.1.3 简述面向服务架构的三个角色和三个操作 ...

最新文章

  1. 一篇综述带你全面了解迁移学习的领域泛化(Domain Generalization)
  2. linux内核线程创建销毁机制
  3. 'htons' was not declared in this scope 解决
  4. linux下ntp服务器搭建方法
  5. HoloLens开发手记 - Unity development overview 使用Unity开发概述
  6. 计算机指令系统课件,计算机组成原理课件05指令系统.ppt
  7. arm ubuntu 编译boost_为arm linux 交叉编译boost 1.33.1
  8. 寻宝处理器的引人入胜之旅——《大话处理器》新书出炉
  9. 高精度事件计时器怎么关闭_Node.js 事件循环
  10. 谈学习:合格的编程自学者必须知道的几点
  11. ip地址在c语言中长度是多少_c语言中(++i)+(++i)+(++i)究竟等于多少?
  12. Windows下 VMware XP虚拟机 架设论坛
  13. AHCI sata设备初始化流程
  14. AUTOCAD——复制命令、镜像命令
  15. mysql安装教程_mysql 5.5 安装配置方法图文教程
  16. 机器学习中输入空间、特征空间、假设空间
  17. 常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232)
  18. Ubuntu 11.10与“核高基画饼“
  19. 坚守初心,白鹭引擎七年之痒
  20. pip安装tiny-cuda-nn编译时出现-lcuda找不到情况

热门文章

  1. 3d编辑器的gizmo的缩放计算
  2. E站账号cookie分享_产品经理必懂知识点—cookie和session
  3. 永磁同步电机的标么值系统
  4. 活体检测Face Anti-spoofing前世今生:作者(Fisher Yu )
  5. RDD与MapReduce对比
  6. 饭局 男人必学 女人必知
  7. 数据库DQL数据查询语言
  8. office之PPT插入页码没有反应
  9. eclipse导入已存在工程报 Faceted Project Problem 错误
  10. x265探索与研究(一):x265下载安装与配置