Java基础——4、面向对象(上)——类、对象、属性、方法、构造器

接上一章
数组(下)

面向对象学习的三条主线

1、Java类及类的成员:属性、方法、构造器;代码块、内部类
2、面向对象的三大特征:封装性、继承性、多态性、(抽象性)
3、其他关键字:this、super、static、final、abstract、interface、
package、import

1、Java基本元素:类和对象

类和对象是面向对象的核心概念
:是堆一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因此也称为实例
万事万物皆对象
在这里插入图片描述

1.1、设计类

public class Person {
	//属性
	String name;
	//方法
	public void eat(){
		System.out.println("人可以吃饭");
	}
}

1.2、创建对象

public static void main(String[] args) {
		//创建Person类的对象 == 也叫类的实例化 ==实例化类
		Person p = new Person();
	}

1.3、调用对象的结构

public static void main(String[] args) {
		//创建Person类的对象
		Person p = new Person();
		//调用对象的结构:属性或方法
		//调用属性
		p.name="小明";
		System.out.println(p.name);//小明
		//调用方法
		p.eat();//人可以吃饭
	}

如果创建了一个类的多个对象,则每个而对象都独立的拥有一套类的属性。 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

内存解析
栈:存放局部变量
堆:存放对象实例
方法区:用于存储已被虚拟机加载的类信息、常量、
静态变量、即时编译器编译后的代码等数据在这里插入图片描述

1.4、 对象的内存解析

在这里插入图片描述

2、类的成员之一:属性的使用

***属性(也叫成员变量)***:直接定义在类的一对{}内

2.1、属性(成员变量) vs 局部变量

在这里插入图片描述

2.1.1、相同点

  • 定义变量的格式:数据类型 变量名 = 变量值
  • 先声明、后使用
  • 变量都有其对应的作用域

2.1.2、不同点

  • 1、在类中声明的位置的不同

属性(成员变量):声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

  • 2、关于权限修饰符的不同

属性(成员变量):可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符:private\public\缺省\protecte —封装性
目前,大家声明属性时,都使用缺省就可以了
局部变量:不可以使用权限修饰符

  • 3、 默认初始化的情况的不同

属性(成员变量):类的属性,根据其类型,都有默认初始化值
在这里插入图片描述
局部变量:没有默认初始化值
意味着,我们在调用局部变量之前,一定要显示赋值,代码如下:
特别的:形参在调用时,我们赋值即可在这里插入图片描述

  • 4、在内存中加载的位置

属性(成员变量):加载到堆空间中(非static)
局部变量:加载到栈空间

3、类的成员之二:方法的使用

3.1、方法的声明

方法的声明:权限修饰符 返回值类型 方法名(形参列表){
			方法体
}

3.1.1、权限修饰符:private、public、缺省、protected

在这里插入图片描述

3.1.2、返回值类型:有返回值和无返回值

有返回值,
则必须在方法声明时,指定返回值的类型
同时,方法中,需要使用return关键字来返回指定类型的变量或常量。

无返回值,
则方法声明时,使用void来表示。通常,不需要return
即便使用return的话,只能" return;" 表示结束此方法

3.1.3、return关键字的使用:

使用范围:
使用在方法体中
作用:
1、可以用来结束方法
2、"return 数据"方法返回所要的数据
注意点:
retrun关键字后面不可以声明执行语句。

3.2、方法的分类

  • 无参无返回值
public void eat(){
		System.out.println("人可以吃饭");
	}
  • 无参有返回值
public boolean ismale1(){
		ismale = true;//是男人
		return ismale;
	}
  • 有参无返回值
public void eat(String food){
		System.out.println("人可以吃"+food);
	}
  • 有参有返回值
public int getage(int age){
		return age;
	}

4、匿名对象的使用

  • 1、理解

我们创建的对象,没有显示的赋给一个变量名,即为匿名对象

  • 2、特征

匿名对象只能调用一次
因为,只要new一次,堆空间就会开辟一个新的对象

  • 3、使用如下
public void sleep(Person p1){
		p1.name="小白";
		System.out.println(p1.name+"在睡觉");
	}

5、方法的重载——两同一不同

5.1、重载的概念:

两同一不同
在同一个类中,存在多个同名的方法,只要他们的
参数个数或者参数类型不同即可

5.2、重载的特点:

与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)
调用时,根据方法参数列表的不同来区别

5.3、重载的实例:

参数列表要不同
在这里插入图片描述

6、方法参数的值传递机制

关于变量的赋值
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值

方法参数的值传递机制:值传递
形参:方法定义时,声明在小括号内的参数
实参:方法调用时,实际传递给形参的数据

内存的角度分析该main方法执行的原理
在这里插入图片描述

值传递机制

在这里插入图片描述

7、递归方法

一个方法体内调用它自身

方法递归包含了一种隐式的循环,他会重复执行某段代码,但这种重复执行无需循环控制
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环

public class Test {

	public static void main(String[] args) {
		Test t = new Test();
		int sum = t.sum(100);
		System.out.println("总和为:"+sum);//总和为:5050
	}
	//例题:计算1-100之间所有自然数的和
	public int sum(int num){
		if (num == 1) {
			return 1;
		} else {
			return num+sum(num - 1);
		}
	}

}

//100+sum(99)
//100+99+sum(98)
//100+99+98+sum(97)
//100+99+98+97+sum(96)
...

8、封装与隐藏

我们程序设计追求“高内聚,低耦合
➢高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
➢低耦合:仅对外暴露少量的方法用于使用。

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提 高系统的可扩展性、可维护>性。通俗的说,把该隐藏的隐藏起来,该暴露
的暴露出来。这就是封装性的设计思想。

/*
封装性的体现:
将类的属性XXX私有化(private),同时,
提供公共的(public)方法来获取(getXXX)私有属性
提供公共的(public)方法来设置(setXXX)私有属性的值
*/
public class Animals {
	
	public String name;//
	private int legs;//private 私有属性
	
	//提供关于legs私有属性的get和set方法,便于外部获取和赋值
	public int getLegs() {//公共方法
		return legs;
	}
	public void setLegs(int legs) {//公共方法
		this.legs = legs;
	}

}

封装性的体现:
1、如上,对属性私有化,公共方法去调用
2、不对外暴露的私有方法
3、单例模式
封装性之所以能体现,归根结底离不开权限修饰符的作用

9、权限修饰符

Java规定的4种权限(从小到大排列)
private 、default(缺省)、protected、public
在这里插入图片描述
在这里插入图片描述

10、类的成员之三:构造器(或构造方法)

10.1、构造器的作用

用来创建对象

说明

1、如果没有显式的定义类的构造器的话,则系统会默认提供一个空参的构造器
2、定义构造器的格式: 权限修饰符 类名(形参列表){}
3、一个类中定义的多个构造器,彼此构成重载
4、一旦我们显示的定义了构造器,系统将不会提供默认的无参构造器
5、一个类中至少会有一个构造器

10.2、构造器的使用

实体类:

public class TriAngle {
	private double base;//底边长
	private double height;//高
	//无参构造
	public TriAngle(){
		
	}
	//有参构造  new对象的时候可以初始化对象的属性
	public TriAngle(double b, double h){
		base = b;
		height = h;
	}
	public void setBase(double b){
		this.base = b;
	}
	public double getBase(){
		return base;
	}
	public void setHeight(double h){
		this.height = h;
	}
	public double getHeight(){
		return height;
	}
}

测试类:

public class test {

	public static void main(String[] args) {
		TriAngle t = new TriAngle(1.0,2.0);//利用有参构造创建对象,并且给对象的属性赋值
		System.out.println("底边长:"+t.getBase());//底边长:1.0
		System.out.println("高:"+t.getHeight());//高:2.0
	}

}

控制台输出结果:
在这里插入图片描述

11、JavaBean

1、JaveBean是一种Java语言写成的可重用组件
2、所谓JavaBean,就是必须符合如下3个标准的Java类
在这里插入图片描述

12、this的使用

this 可以用来修饰:属性、方法、构造器
this理解为:当前对象

13、关键字 :package、import的使用

package:包

声明类或接口所属的包,
声明在源文件的首行

import:导入

指定报下的类、接口
声明在包的的声明和类的声明之间
需要导入多个结构,则并列写出即可

14、MVC设计模式

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值