Java笔记(韩顺平Java基础7-8章)

第7章 面向对象编程(基础部分)

类与对象

  • 使用现有技术解决
    1)单独的定义变量解决
    2)使用数组解决

  • 现有技术解决的缺点分析
    不利于数据的管理
    效率低

  • 类与对象的关系示意图
    在这里插入图片描述在这里插入图片描述

  • 类和对象的区别和联系
    1)类是抽象的,概念的,代表一类事物,比如人类,猫类…,即它是数据类型
    2)对象是具体的,实际的,代表一个具体事物,即是实例
    3)类是对象的模板,对象是类的一个个体,对应一个实例

  • 对象在内存中存在形式(重要)
    在这里插入图片描述

  • 属性/成员变量

√基本介绍
1.从概念或叫法上看:成员变量 = 属性 = field(字段)(即 成员变量是用来表示属性的,授课中,统一叫属性)例如:Car(name,price,color)

2.属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类的int age就是属性

√注意事项和细节说明
1)属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;
访问修饰符:控制属性的访问范围
有四种访问修饰符 public,proctected,默认,private
2)属性的定义类型可以为任意类型,包含基本类型或引用类型
3)属性如果不赋值,有默认值,规则和数组一致。

  • 如何创建对象
    1.先声明再创建
    Cat cat;
    cat = new Cat();
    2.直接创建
    Cat cat = new Cat();

  • 如何访问属性
    √基本语法
    对象名.属性名;

  • 类和对象的内存分配机制(重要)
    在这里插入图片描述在这里插入图片描述
    √Java内存的结构分析
    1.栈:一般存放基本数据类型(局部变量)
    2.堆:存放对象(Cat cat,数组等)
    3.方法区:常量池(常量,比如字符串),类加载信息

√Java创建对象的流程简单分析

Person p = new Person();
p.name = "jack";
p.age = 10;

1.先加载Person类信息(属性和方法信息,只会加载一次)
2.在堆中分配空间,进行默认初始化(看规则)
3.把地址赋给p,p就指向对象
4.进行指定初始化,比如p.name = “jack”; p.age = 10;

成员方法

  • 基本介绍
    在某些情况下,我们需要定义成员方法(简称方法)。比如人类:除了有一些属性外(年龄,姓名…),我们人类还有一些行为比如:可以说话、跑步…通过学习,还可以做算术题,这时就要用成员方法才能完成。

  • 成员方法快速入门
    实例:
    1)添加speak 成员方法,输出 我是一个好人
    2)添加cal01成员方法,可以计算从1+…+1000的结果
    3)添加cal02成员方法,该方法可以接收一个数n,计算从1+…+n的结果
    4)添加getSum成员方法,可以计算两个数的和

  • 方法的调用机制原理(程序getSum的执行过程)
    在这里插入图片描述

  • 为什么需要成员方法
    √看一个需求:
    在这里插入图片描述
    请遍历一个数组,输出数组的各个元素值。
    解决思路1:传统方法,就是使用单个for循环,将数组输出(问题:相同代码的重复)
    解决思路2:定义一个类MyTools,然后写一个成员方法,调用方法实现

  • 成员方法的好处
    √提高代码的复用性
    √可以将实现的细节封装起来,然后供其他用户来调用即可。

  • 成员方法的定义
    在这里插入图片描述

  • 注意事项和使用细节
    √访问修饰符(作用是控制方法使用的范围)
    如果不写默认访问,[有四种:public,protected,默认,private]

√返回数据类型
1.一个方法最多有一个返回值(多个值考虑使用数组)
2.返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
3.如果方法要求有返回数据类型,则方法体中最后执行语句必须为return值;而且要求返回值类型必须和return的值类型一致或兼容
4.如果方法是void,则方法体中可以没有return语句,或者只写return;

2对应实例:

class AA{
   

	public int[] getSumAndSub(int n1,int n2){
   

		int[] resArr = new int[2];	//创建一个数组
		resArr[0] =  n1 + n2;
		resArr[1] =  n1 - n2;
		return resArr;
	}
}

√方法名
遵循驼峰命名法,最好见名知义,表达出该功能的意思即可,比如 得到两个数的和getSum,开发中按照规范

√形参列表

  1. 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开,比如getSum(int n1, int n2)
  2. 参数类型可以为任意类型,包含基本类型或引用类型,比如printArr(int[][] map)
  3. 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数!【getSum
  4. 方法定义时的参数称为形式参数,简称形参;方法调用时的传入参数称为实际参数,简称实参,实参和形参的类型要一致或兼容、个数、顺序必须一致!

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

√方法调用细节说明
1.同一类中的方法调用:直接调用即可。
2.跨类中的方法A类调用B类方法:需要通过对象名调用。比如对象名.方法名(参数);
3.特别说明一下:跨类的方法调用和方法的访问修饰符相关

实例:

class A{
   
	//同一个类中的方法调用:直接调用即可
	//可执行

	public void print(int n){
   
		System.out.println("print()方法被调用 n=" + n);
	}

	public void sayOk(){
   	//sayok调用 print(直接调用)
		print(10);
		System.out.println("继续执行sayOk()~~~~");
	}

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

	public void m1(){
   
		//创建B对象,然后再调用方法即可
		System.out.println("m1()方法被调用");
		B b = new B();
		b.hi();

		System.out.println("m1()继续执行");
	}
}

class B{
   

	public void hi(){
   
		System.out.println("B类中的hi()被执行");
	}
}

成员方法传参机制(!!!)

  • 基本数据类型的传参机制
    基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!
  • 引用数据类型的传参机制
    引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

实例:

public class MethodParameter02{
   
	//编写一个main方法
	public static void main(String[] args){
   

		B b = new B();
		//测试
		Person p = new Person();
		p.name = "jack";
		p.age = 10;

		b.test200(p);
		//测试题,如果test200执行p = null;下面结果是10
		//测试题,如果test200执行p = new Person();下面结果是10
		System.out.println("main 的p.age=" + p.age);	//如果test200执行p.age = 10000; 下面结果为10000
	}
}

class Person{
   
	String name;
	int age;
}

class B{
   

	public void test200(Person p){
   
		//p.age = 10000;
		//思考
		//p = null;
		//思考
		p = new Person();
		p.name = "tom";
		p.age = 99;
	}
}

方法递归调用(!!!)

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

  • 递归能解决什么问题?
    1.各种数学问题如:8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题(google编程大赛)
    2.各种算法中也会使用递归,比如快排,归并排序,二分查找,分治算法等。
    3.将用栈解决的问题–>递归代码比较简洁

递归调用实例:


public class Recursion01{
   
	//编写一个main方法
	public static void main(String[] args){
   

		T t1 = new T();
		t1.test(4);	//输出什么?
	}
}

class T{
   
	//分析
	public 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值