第五节 面向对象基础OOP


一、对象在计算机中的执行原理

Student s1 = new Student();这句话中的原理如下

  • Student s1表示的是在栈内存中,创建了一个Student类型的变量,变量名为s1

  • new Student()会在堆内存中创建一个对象,而对象中包含学生的属性名和属性值

    同时系统会为这个Student对象分配一个地址值

  • 接着把对象的地址赋值给栈内存中的变量s1,通过s1记录的地址就可以找到这个对象

二、类和对象的注意事项

// 定义类
public class 类名{
	1、成员变量(代表属性,一般是名词):数据类型 名称;
	2、成员方法(代表行为,一般是动词)
	3、构造器
	4、代码块
	5、内部类
}
// 创建对象
类名 对象名 =new 构造器();

// 对象怎么使用
对象名.成员变量
对象名.成员方法
  1. 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car…
  2. 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
  3. 成员变量本身存在默认值,在定义成员变量时一般来说不需要赋初始值(没有意义)。
  4. 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
  5. 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
  6. 如果某个对象没有一个变量引用它,则该对象无法被作了,该对象会成为所谓的垃圾对象。

三、this关键字

作用
代表了当前对象的地址,可以访问当前对象的成员变量和成员方法。

在构造器中:this在构造器中,代表构造器正在初始化的那个对象。

public Car(String name, double price){
	// 注意:this在构造器中,代表构造器正在初始化的那个对象。
	System.out.println(this);
	this.name = name;
	this.price = price;
}

在方法中:this在方法中,谁调用这个方法this就代表谁!

public void goWith(String name){
	// 注意:this在方法中,谁调用这个方法this就代表谁!
	System.out.println(this.name +"正在和"+ name +"比赛");
}

四、构造器

什么是构造器
构造器其实是一种特殊的方法,但是这个方法没有返回值类型,方法名必须和类名相同。
无参构造器:初始化一个类的对象,并返回这个对象的地址里面的数据都是默认值
有参构造器:初始化一个类的对象,并返回这个对象的地址并且可以同时为对象赋值。

public class Student{
	// 无参数构造器
	public Student{
	}
	// 有参数构造器
	public Student (String name,double score){
	}
}

构造器的特点
在创建对象时,会调用构造器。
new Student()就是在执行构造器,当构造器执行完了,也就意味着对象创建成功。

构造器的常见应用场景
创建对象时,同时完成对对象成员变量(属性)的初始化赋值。

构造器的注意事项
类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的。
一旦定义了有参数构造器,Java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。

五、封装

面向对象的三大特征-----封装、继承、多态

什么是封装
用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理数据的方法,都设计到一个对象中去

封装的设计规范:合理隐藏、合理暴露

成员变量private私有化,被private修饰的变量或者方法,只能在本类中被访问
合理暴露:提供成套的getter和setter方法暴露取值和赋值

六、实体JavaBean

什么是实体类
①类中的成员变量都要私有,并且要对外提供相应的getXxx,setXxx方法
②类中必须要有一个公共的无参的构造器。
特点
实体类仅仅只用来封装数据,只提供对数据进行存和取的方法
应用场景
JavaBean实体类,只负责封装数据,而把数据处理的操作放在其他类中,以实现数据和数据处理相分离。
成员变量和局部变量的区别

区别成员变量局部变量
类中位置不同类中,方法外常见于方法中
初始化值不同有默认值,不需要初始化赋值没有默认值,使用之前必须完成赋值
内存位置不同堆内存栈内存
作用域不同整个对象在所归属的大括号中
生命周期不同与对象共存亡随着方法的调用而生,随着方法的运行结束而亡

七、static

1.修饰成员变量
Java中的成员变量按照有无static修饰分为两种:类变量、实例变量

类变量 :有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
由于静态变量是属于类的,只需要通过类名就可以调用:类名.静态变量

实例变量(对象的变量):无static修饰,属于每个对象的。
实例变量是属于对象的,需要通过对象才能调用:对象.实例变量

2.修饰成员方法
成员方法根据有无static也分为两类:类方法、实例方法

有static修饰的方法,是属于类的,称为类方法;调用时直接用类名调用即可。

无static修饰的方法,是属于对象的,称为实例方法;调用时,需要使用对象调用。

类方法的常见应用场景

类方法最常见的应用场景是做工具类

工具类是什么

工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。工具类里的方法全都是静态的,推荐用类名调用为了防止使用者用对象调用。我们可以把工具类的构造方法私有化。

3.注意事项

  • 类方法中可以直接访问类的成员,不可以直接访问实例成员。
  • 实例方法中既可以直接访问类成员,也可以直接访问实例成员。
  • 实例方法中可以出现this关键字,类方法中不可以出现this关键字的。

4.代码块
代码块

代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。

代码块分为两种:

1.静态代码块:
格式:static {}
特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次。
作用:完成类的初始化,例如:对类变量的初始化赋值。(不需要创建对象就能够执行)

2.实例代码块:
格式:{}
特点:每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值。(每次创建对象之前都会先执行实例代码块。)

5.static应用(单例设计模式)

单例设计模式
~确保一个类只有一个对象。
写法
~把类的构造器私有。
~定义一个类变量记住类的一个对象。
~定义一个类方法,返回对象。

public class A{ 
	//2、定义一个类变量记住类的一个对象
	private static A a = new A();
	//1、必须私有类的构造器
	private A(){
	}
	// 3、定义一个类方法返回类的对象
	public static A getObject(){ return a; }
}

(1)饿汉模式:拿到对象时对象已经创建好啦

public class A {
	//2、定义一个类变量记住类的一个对象
	private static A a= new A();
	// 1、私有构造器
	private A(){
	}
	// 3、定义一个类方法返回对象
	public static A getObject(){return a;}
}

(2)懒汉模式

懒汉式单例设计模式
~拿对象时,才开始创建对象。
写法
~把类的构造器私有。
~定义一个类变量用于存储对象。
~提供一个类方法,保证返回的是同一个对象。

public class B{
	//懒汉式单例类
	private static B b;
	private B(){ 
	}
	public static B getObject(){ 
		if (b == null){
		System.out.println("第一次创建对象");
		b = new B();
		}
		return b;
	}
}	

八、继承

1. 定义

什么是继承
Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。

public class B extends A{
}
A类称为父类(基类 或超类)。
B类称为子类(派生类)。

继承的特点
子类能继承父类的非私有成员(成员变量、成员方法)。

继承后对象的创建
子类的对象是由子类、父类共同完成的。

继承的好处
继承可以提高代码的复用性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值