DAY5面向对象初

类与对象(OOP)

 

用单独变量来解决,不利于数据的管理

用数组来解决,数据类型体现不出来。(2)只能通过下标获取信息,造成变量名字和内容对应关系不明确(3)不能体现猫的行为。

现有技术效率低、不利于数据的管理

概述

用对象来体现各种事物

对象有【属性、行为】构成

关系示意图

 

(什么)类是自己定义的数据类型**

通过类可以创建对象(实例)

***类就是数据类型

***对象就是一个具体的实例

*从类到对象有几种说法:1创建一个对象2实例化一个对象3把类实例化

使用面向对象的方式来解决养猫问题

//定义一个猫类

class Cat{

String name;

int age;

}

//使用OOP面向对象解决

//new Cat()创建一只猫【实例化一只猫】

//Cat cat1 = new Cat(); 把创建的猫赋给cat1. cat1就是一个对象

Cat cat1 = new Cat();

cat1.name = "小白";

cat1.age = 3;

类和对象的区别和联系

对象在内存中的存在形式

属性/成员变量

从概念或叫法上看:成员变量=属性= field【字段】(即成员变量是用来表示属性的。)

属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象、数组)

注意事项和细节说明

(1)属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;

访问修饰符:控制属性的访问范围;有四种访问修饰符 public protected 默认 private

(2)属性的定义类型可以为任意类型,包含基本类型或引用类型

(3) 属性如果不赋值,有默认值,规则和数组一致

properties 属性

Person p1 = new Person();//p1 是对象名(对象引用),new Person() 创建的对象空间(数据)才是真正的对象;age = 10;是属性

如何创建对象

1先声明再创建

Cat cat;

cat = new Cat();

2直接创建

Cat cat = new Cat();

如何访问属性

语法:对象名.属性名;

类与对象的内存分配机制***

 

Java内存的结构分析

1栈:一般存放基本数据类型( 局部变量)

2堆存放对象

3方法区:常量池,类加载信息

成员方法

一些行为需要用成员方法(方法)才能完成

method 方法

class Person{//创建一个Person 类

String name;//属性

int age;//属性

public void speak() {

System.out.println("I am a good person");

}

}

/*

public 表示方法是公开的

void 表示方法没有返回值

speak 是方法名

()是形参列表。里面没有内容代表这个方法没有传入的参数

{}是方法体,可以写我们要执行的代码或相关的功能

/

//方法写好后,不去调用,就没有输出

调用方法

对象名.方法名();

p1.speak();

*** * 方法的调用机制

 

 

方法的妙用

多次遍历一个二维数组

 

MyTools ming = new MyTools;

ming.printArr();

好处

提高代码的复用性

可以将实现的细节封装起来,然后供其他用户来调用即可

成员方法定义

public 返回数据类型 方法名 (形参列表..){

//方法体

语句;

return 返回值;

}

1)形参列表:表示成员方法的输入。

2)数据类型(返回类型):表示成员方法输出,void表示没有返回值

3)方法主体:表示为了实现某一功能代码块

4)return 语句不是必须的。

方法的注意事项和使用

访问修饰符:

public代表访问修饰符(作用是控制方法使用的范围) 如果不写,就是默认访问

返回数据类型:

1 一个方法最多有一个返回值

多个** :可以返回数组

2 返回类型可以为任意类型,包含基本类型或引用类型

3如果方法要求有返回数据类型,则方法体中 最后的执行语句必须为 return 值;而且要求返回值类型必须和return的值类型一致或兼容。

4 如果方法是void,则方法体中可以没有return语句,或者只写return;

 

public class Method1{ public static void main(String[] args) { addtwo wo = new addtwo();//new adddtwo()创建的数据(对象)赋给 wo; int [] a = wo.SumSub(5,4);//调用方法返回的res到这,再赋给 a System.out.println("he="+a[0]); System.out.println("cha=" +a[1]); } } class addtwo{//定义一个类,类名是addtwo public int[] SumSub(int n1 , int n2){//public 返回数据类型 方法名 (形参列表..) int [] res = new int[2];//定义一个数组,数组名res res [0] = n1 + n2; res [1] = n1 - n2;//功能代码块 return res;//返回res,到

} }

成员方法的注意事项和使用细节

形参列表:

1,一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开

2,参数类型可以为任意类型,包含基本类型 或引用类型 例如:printArr(int[] map)

3,调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数

4,方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参,实参和形参的类型要一致或兼容,顺序、个数必须一致。

方法体:

里面写完成功能的具体语句,可以为输入、输出、变量、运算、分支、循环、方法调用,但里面不能再定义方法!即:方法不能嵌套定义。

方法细节调用说明

1,同一个类中的方法调用:直接调用即可。方法名(参数)

2,跨类中的方法A类调用B类方法:需要通过对象名调用。对象名.方法名(参数);

***先在 该方法中创建对象 类名 对象名 = new 类名();

3,跨类的方法调用和方法的访问修饰符有关

  

传参机制***

paramete参数

基本数据类型的传参机制

将main类里的基本数据类型传给方法后,main类里的基本数据类型不会变

引用数据类型的传参机制

在方法中修改数组后,main类的数组也会相应改变 引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参

克隆对象

 

方法递归调用

递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂问题,同时可以让代码变得简洁

recuision递归

 

factorial阶乘

 

递归重要规则

1,执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

2,方法的局部变量是独立的,不会相互影响,比如n变量

3,如果方法中使用的是引用类型变量(比如数组、对象),就会共享该引用类型的数据

4,递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟了

5,当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。

递归调用应用实例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值