Java 基础知识(2)-方法,类

1 方法 语句块

语句块:用 { }括起来的简单java语句,块确定了局部变量的作用域,块中的程序代码,作为一个整体被一起执行

方法:一段完成特定功能的代码片段,类似于函数
方法用于定义该类或该类的实例的行为特征或功能实现,方法是类和对象行为特征的抽象,方法类似于面向过程中的函数,面向过程中,函数是基本单位,整个程序由一个个函数调用组成,面向对象中,整个程序的基本单位是类,方法是从属于类和对象的

方法的声明格式:

[修饰符 修饰符] 返回值类型 方法名(形参列表) {
	java语句...
	.....
}

如无返回值,那么返回值类型必须指定为void

方法的调用方式:
对象名.方法名(实参列表)

在这里插入图片描述
注意事项:
1,实参的数目,数据类型,次序必须和形参匹配
2,return语句终止方法的运行并指定要返回的数据
3,java中传递参数时,遵循值传递即传递的是数据的副本

2 方法的重载 overload

所重载的方法,实际上是完全不同的方法,只是名称相同而已

构成方法重载的条件:
1,不同的含义:形参类型,形参个数,形参次序不同
在这里插入图片描述

2,只有返回值类型不同不构成方法的重载,可能与其它方法无法区分
如:

int a(String str) {void a(String str) {
	...							...
}							}

3,只有形参的名称不同不构成方法的重载,可能与其它方法无法区分
如:

int a(String str) {int a(String s) {
	...							...
}							}

3 递归

递归的基本思想就是自己调用自己

一个有问题的递归例子:
在这里插入图片描述
方法a()再不断地调用自己,一开始可以不断打印a,但经过一段时间后,递归占用了太多的系统资源,程序终止,抛出异常

为了正确地使用递归,递归需要包含两个结构:
1,定义递归头,明确什么时候不调用自身方法,也就是递归的结束条件,如果没有头,那么会陷入死循环
2,递归体,即什么时候需要调用方法本身

上面的程序增加递归头和递归体后:
在这里插入图片描述

递归求阶乘的一个例子:

在这里插入图片描述

递归的过程:
在这里插入图片描述

注意:可以使用递归的问题也都可以使用循环迭代来解决,尽量避免使用递归,递归既花时间又耗内存

4 面向过程和面向对象

面向过程(C…)和面向对象(java,C++…)都是对软件分析,设计和开发的一种思想,它指导着人们以不同的方式分析,设计,开发软件

面向过程:面向过程思考问题时,我们首先思考‘怎么按步骤实现?’,并将步骤对应成程序,一步一步完成。面向过程适用于简单任务,不需要过多协作的情况下

当我们思考‘如何开车’时,按步骤地打火,踩离合,踩油门这就是面向过程的方式,但是当问题复杂时,比如‘如何造车’,需要先思考车由什么组成,每个部件该怎么造,这种需要很多协作才能完成的任务时,面向对象就诞生了

面向对象:面向对象(object)思想更契合人的思维模式,我们首先思考的是‘怎么设计这个东西?’,比如思考如何造一辆车,我们会先思考‘车由什么组成’,而不是‘造车的步骤是什么’

面向过程和面向对象总结:
1,都是解决问题的思维方式,都是代码组织的方式
2,解决简单问题使用面向过程
3,解决复杂问题,再宏观上使用面向对象把握,在微观处理上仍然落实到面向过程

5 对象是什么

任何事物的发展都遵循‘量变引起质变’,数据也是如此,当进行庞大的项目开发时,各种类型的变量也变得庞大起来,而且对数据的操作也会更加复杂

为了便于协作和管理,我们将‘相关数据和相关方法封装到一个独立的实体’,于是‘对象’就产生了

比如一个学生对象:
有属性(静态特征):年龄:18,姓名:张三,学号:123
有方法(动态行为):学习,吃饭,考试

6 对象和类

类:类可以看成一个模板,或者图纸,系统根据类的定义来造出对象

对于天使这一事物,通过观察多张图片后,通过抽象,我们可以观察出天使的几个特征:
1,有翅膀
2,女性
3,善良
4,有光环
有了这些天使的特征,我们也可以归纳一个天使类,这个过程类就是对象的抽象

我们要造一个汽车,怎么样造?类就是图纸,规定了汽车的详细信息,根据图纸再造出汽车

类 class对象(object)/实例(instance),某个类的对象,某个类的实例,其意思是一样的

7 定义第一个类

对于一个类来说,一般有3个常见的成员,属性 field方法 method构造器 constructor,这3种成员可以定义0个或多个

属性 field:用于定义该类或该类对象包含的数据(静态特征),属性的作用范围是整个类体,在定义成员变量时可以对其初始化,如果不对其初始化,那java使用默认的值对其初始化

方法 method:方法用于定义该类或该实例的行为特征和功能实现,方法是类和对象行为特征的抽象,方法类似于面向过程中的函数,方法从属于类和对象

一个简单的学生类:

package t2;

public class Student {
	//属性
	int id;
	String name;
	int age;
	
	Computer comp; //嵌套了Computer类
	
	//方法,该学生可以学习,吃饭,睡觉等功能特征
	void study() {
		System.out.println("study " +"by " + comp.brand);
	}
	
	void paly() {
		System.out.println("play " +"by " + comp.brand);
	}
	
	//构造方法,用来创建这个类的对象
	//无参的构造方法可以由系统自动创建可以不写
	Student() {	
	}
	
	//main方法是程序执行的入口,必须要有
	public static void main(String[] args) {
		Student stu = new Student(); //通过构造方法创建一个新对象
		stu.id = 1001;
		stu.name = "coisini";
		stu.age = 21;
		
		Computer c1 = new Computer();
		c1.brand = "hp";
		
		stu.comp = c1;
		
		stu.paly();
		stu.study();
	}

}

class Computer {
		String brand;
}

8 内存分析

java虚拟机的内存可以分成3个区域:
栈(stack),堆(heap),方法区(method area)
,方法区其实也在堆里,只是作用比较特殊

栈的特点
1,栈描述的是方法执行的内存模型,每个方法被调用时都会创建一个栈帧(存储局部变量,操作数,方法出口等)
2,JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量)
3,栈属于线程私有,不能实现线程间共享
4,栈的存储特性是‘先进后出
5,栈是系统自动分配的,速度快,栈是一个连续的内存空间

堆的特点
1,堆用于存储创建好的对象
2,JVM只有一个堆,被所有线程共享
3,堆是一个不连续的空间,分配灵活,速度慢

方法区(静态区)特点
1,JVM只有一个方法区,被所有线程共享
2,方法区实际也是堆,只是用来存储类,常量的相关信息
3,用来存放程序中永远是不变或唯一的内容(类信息,class对象,静态变量,字符串常量等)

对上一个程序的内存分析:
在这里插入图片描述

9 构造方法

构造方法 constructor:也称构造器,用于对象的初始化

按住alt + shift 再按 o 可以自动生成构造器

要点:
1,要通过new关键字调用
2,构造器虽然有返回值,但是不能定义返回值类型,不能在构造器里使用return返回某个值
3,如果没有定义构造器,则编译器会自动定义一个无参的构造方法,如果已定义则编译器不会自动添加
4,构造器的方法名必须和类名一致

在这里插入图片描述

构造方法也是方法,只不过有特殊的作用,与普通方法一样,构造方法也可以重载

注:如果方法构造中形参名与属性名相同时,需要使用this关键字区分属性和形参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值