类与对象(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,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。