Java面向对象(九)——面向对象、类与对象(局部和全局变量,基本和引用类型数据传参)、封装(private、this)

说明:

JAVA(一)——(八)为Java基础

JAVA(九)——(十四)为Java面向对象

目录

第一章面向对象

1.1面向过程与面向对象

第二章类与对象

2.1类与对象的含义

2.2成员变量与局部变量的区别

2.3基本类型和引用类型作为参数传递

第三章 封装

3.1封装概述

3.2私有private

3.3 this关键字

例1:随机点名器


第一章面向对象

 

1.1面向过程与面向对象

  • 面向过程是以事物为中心,编程的时候把解决问题的步骤分析出来,用函数把这些步骤实现。它们不支持丰富的“面向对象”特性(比如继承、多态)。面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程。

当问题的规模变大时,面向过程就不易解决了,因此有了面向对象。

  • 面向对象就是将问题分解为对象。面向对象的程序设计方式,是遇到一件事时,思考“我该让谁来做”,然后那个“谁”就是对象。世界上的每个人,每个物体,都可以看做是一个对象。每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。

 

第二章类与对象

 

2.1类与对象的含义

类的含义:

  • 类的真正意义就是在描述事物。属性和方法都属于类的成员。每个事物是一个类,事物的功能就是方法
  • 类是具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。类的实例化是对象,因此类实际上就是一种数据类型。
  • 类的定义:使用关键字class来定义java中的类

对象的含义:

  • 对象是类的实例化,代表一个具体的事物。
  • 类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。

类,用于描述多个对象的共同特征,它是对象的模板。

对象,用于描述现实中的个体,它是类的实例。

 

2.2成员变量与局部变量的区别

类的真正意义就是在描述事物。属性和功能统称为事物中的成员。

事物的成员分为两种:成员属性和成员功能。

  • 属性,为成员变量
  • 方法,为成员功能

1.定义位置不同

  • 成员变量:写在类中,方法外中
  • 局部变量:写在方法内

2.默认值不同

  • 成员变量:有默认值
  • 局部变量:无默认值,使用前必须初始化

3.内存位置不同

  • 成员变量:跟着对象进入堆内存
  • 局部变量:跟随着自己的方法进入栈内存(main中定义的也为局部变量)
  • 内存分配:栈是运行方法用的,堆是存储容器用的

4.生命周期不同

  • 成员变量,跟随对象,在堆中存储,内存等待JVM清理
  • 局部变量,跟随方法,方法出栈则结束,生命周期相对较短

5.作用域不同

  • 成员变量:作用范围是整个类
  • 局部变量:方法内

 

2.3基本类型和引用类型作为参数传递

数组和对象都是引用类型。

举例:

类的定义:

package day9;

public class Person {
	   String name ;
	}

 调用:

package day9;

public class TestPerson {
	public static void main(String[] args) {
		int a = 1;
		function(a);
		System.out.println(a); //1
		
		Person p = new Person();
		p.name = "张三";
		System.out.println(p.name);//张三
		
		function(p);
		
		System.out.println(p.name);//李四
	}
	/*
	 * 定义方法,参数类型是引用数据类型
	 * 参数是Person类型
	 * p接受的是一个内存的地址
	 * main 中的变量p
	 * function  中的变量p  保存的地址是一样的
	 */
	public static void function(Person p){
		p.name = "李四";
	}
	
	/*
	 * 定义方法,参数类型是基本数据类型
	 */
	public static void function(int a){
		a+=5;
	}
}

 结果:

基本类型传递参数,如果没有return,则原来的值不会发生变化。

引用类型传递的是地址,最终值将被修改。

 

 

第三章 封装 

 

3.1封装概述

封装,把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式。

面向对象三大特征:封装、继承、多态。

封装的体现:

  • 变量:使用 private 修饰,这就是变量的封装
  • 方法:也是一种封装,封装了多条代码
  • 类: 也是一种封装,封装了多个方法

封装的好处:

1、提高了代码的复用性。

2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。

3、提高了安全性。

 

3.2私有private

private:是关键字也是一个修饰符 private(私有,权限修饰符),它可以用来修饰类中的成员(成员变量,成员方法)。

private的特点:private修饰的成员只能在当前类中访问,其他类就无法直接访问。

一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

  • 私有化所有的属性 (成员变量) ,必须写对应的get/set方法。
  •  凡是自定义的类,自定义成员变量,应该私有化,提供get/set。

类的定义:

package day9;
/*
 *   类描述人:
 *     属性: 姓名和年龄
 *     方法: 说话
 *   
 *   私有化所有的属性 (成员变量) ,必须写对应的get/set方法
 *   凡是自定义的类,自定义成员变量,应该私有化,提供get/set
 *   
 *   this关键字:
 *     区分成员变量和局部变量同名情况
 *     方法中,方位成员变量,写this.
 */
public class Person_1 {
	private String name;
	private int age;
	
	public void setAge(int a) {
		age=a;
	}
	public void setName(String n) {
		name=n;
	}	
	public int getAge() {
		return age;
	}
	public String getName() {
		return name;
	}
	public void speak() {
		System.out.println("人在说话  " + name + "..." + age);
	}

}

调用: 

package day9;

public class PersonTest_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person_1 p = new Person_1();
		//调用set方法,对成员变量赋值
		p.setAge(18);
		p.setName("花花");
		p.speak();
		
		//调用get方法,获取成员变量的值
		System.out.println(p.getAge());
		System.out.println(p.getName());
	}

}

 

总结:

类中不需要对外提供的内容都私有化,包括属性和方法。

以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。

注意:私有仅仅是封装的体现形式而已。

 

3.3 this关键字

this的作用:用来区别同名的成员变量与局部变量(this.成员变量)

this关键字:本类的对象引用,哪个对象调用了this所在的方法,this就代表哪个对象。

this存在时间:当创建对象的时候,this存在

 举例:成员变量和局部变量冲突时:此时输出的是局部变量:哈哈(就近原则)

添加this后:

想输出成员变量需要加this.

this内存图:

 

例1:随机点名器

定义类:

package day9;
/*
 *  学生类:
 *    属性: 姓名,年龄
 */
public class Student {
	private String name;
	private int age;
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
			this.age= age;
		}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
		
	
	}
}

代码实现: 

package day9;

import java.util.ArrayList;
import java.util.Random;

/*
 *  随机点名器案例
 *   1. 创建集合,将Student对象存储到集合中
 *   2. 总览所有学生的信息
 *       将存储到集合中的Student对象遍历出来
 *   3. 随机学生
 *       随机数,作为索引,到集合中去查找元素
 */
public class CallName {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Student> st= new ArrayList<Student>();
		addStudent(st);
		//printStudent(st);
		randomStudent(st);
	}
public static void addStudent(ArrayList<Student> array) {
	Student s1= new Student();
	Student s2= new Student();
	Student s3= new Student();
	Student s4= new Student();
	s1.setAge(10);
	s1.setName("华华");
	
	s2.setAge(12);
	s2.setName("强强");
	
	s3.setAge(13);
	s3.setName("爱丽丝");
	
	s4.setAge(15);
	s4.setName("徐徐");
	
	array.add(s1);
	array.add(s2);
	array.add(s3);
	array.add(s4);
}

public static void printStudent(ArrayList<Student> array) {
	for(int i=0;i<array.size();i++) {
		Student s=array.get(i);
		System.out.println(s.getName()+" "+s.getAge());
	}
	
}
public static void randomStudent(ArrayList<Student> array) {
	Random r= new Random();
	int num= r.nextInt(array.size());
	Student s=array.get(num);
	System.out.println(s.getName());
}
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值