欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面向对象思维 Java中的类和对象及其应用

程序员文章站 2022-05-25 20:50:09
...

一、面向过程与面向对象

面向过程: 从事务执行者的角度思考问题,我该干什么  重点在过程----事务流程

面向对象: 从事务的指挥者角度思考问题,我应该找谁干什么  重点在对象

面向对象的优点:

1.将复杂问题简单化

2.从事务的执行者转化为事物的指挥者

3.更贴近人的思维(懒人思想)

二、类和对象

类是Java中最基本的单位,是一类抽象事物的集合  对抽象事物的描述(模板)

对象: 用类创建出来的具体的事物就是对象

抽象描述类:

类中的属性是指成员变量

类中的行为是指成员方法

//属性 (成员变量 实例变量)
//书写位置: 类中,方法外

//行为 (方法) 和Java中函数的声明一样,只是不写static关键字
//书写位置: 类中 

创建一个类:  关键字 + class + 类名(大驼峰命名) + { }

例如: 创建一个学生类  

        属性:  姓名  年龄  性别

        行为:  吃饭  睡觉  打游戏

class Student{
    String name;
    int age;
    String gender;
    // 方法---成员方法、实例方法
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void playGame(String game){
        System.out.println("打" + game);
    }
}

创建对象:  类名 + 对象名 = 初值;

例如: 创建一个学生类的对象

Student stu = new Student();
// 使用  对象名.属性名 = 值;  对对象的属性进行赋值和取值
stu.name = "IT彭于晏";
stu.age = "16";
stu.gender = "男";
// 调用成员方法  对象名.方法名();
stu.eat();
stu.sleep();
stu.playGame("毒奶粉"); 
 stu.sayHi(); //在类中声明一个sayHi方法,哪个对象调用该方法,打印的就是哪个对象的属性

三、成员变量与局部变量

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

1.书写位置不同:

成员变量:  类中方法外

局部变量:  方法中或方法上(参数位置)

2.在内存中的表现不同:

成员变量:  堆内存中

局部变量:  栈内存中

3.生命周期不同:

成员变量:  随着对象进入堆内存中创建,随着对象的销毁而销毁

局部变量:  随着方法的调用而入栈,随着方法的结束而销毁

4.作用域不同:

成员变量:  整个类中

局部变量:  方法中

5.初始值不同:

成员变量:  跟堆内存一样,有默认的初始值 0 null

局部变量:  默认没有初值 不给初值编译时会报错 (局部变量声明时必须带有初值)

四、同名类

在同一个项目中可以有同名的类,创建在不同的包下

创建不同包下的同名类,需要指定完整的包名来创建对象

一般情况下不建议写同名类

例如: 在包3和包4下各创建一个person类

//创建一个包3类的person对象

Person p1 = new Person( );

//在继续创建一个包4类下的person对象

com.bao3.Person p2 = new com.bao3.Person( ); // 需要指定完整的包名

注意: 

在方法中基本数据类型的传递是值   引用数据类型则是地址的传递 (要什么类型给什么类型)

面向对象思维 Java中的类和对象及其应用

五、匿名对象

匿名对象: 没有名字的对象

1. 一般 在方法传参的时候调用

2. 只调用一下方法(不赋值的情况下)

使用匿名对象当方法的参数 可以减少代码量,方便使用

public static void main(String[] args) {
		// 创建两个Person对象 并赋值
		// 将重复代码 抽成一个方法
		Person p1 = new Person();
		p1.name = "linqingxia";
		p1.age = 16;
		p1.sayHi();
		Person p2 = new Person();
		setNameAndAge(p2, "wangzuxian", 25);
		// 使用匿名对象 当方法的参数
		setNameAndAge(new Person(), "maoqiu", 20);
		// 匿名对象 也是对象 也可以赋值 调用成员方法
		new Person().name = "xin";
		new Person().age = 30; 
		new Person().sayHi(); // 注意: 获取不到"xin" 30----每new一次在堆内存中新生成一块空间
		// 只调用方法可以使用匿名对象
		// 测试方法的时候 可能会使用
		new Person().fun();
	}

六、封装与构造方法

    封装

Java中 写 方法、函数 就是封装的一种

封装相当于隐藏了代码的实现和属性 不能随意修改

需要开放访问的接口(方法 方式) 来获取或修改封装的代码

优点:

1.提高了代码的复用性

2.提高了代码的安全性

关键字 中的 权限修饰符--> private 私有的

被private修饰的属性 只能本类中访问

java bean 规范(java的实体类创建出来的对象)

1.声明成员变量 都需要 私有化

2.给每个成员变量提供set和get方法

3.必须提供 无参的构造方法

class Phone{
    private String phoneName;
   
    // 获取方法
    public String getPhoneName(){
       return phoneName;
    }
    // 修改方法
    public void setPhoneName(String phoneName){
       this.phoneName = phoneName;
       // 关键字 this 代表的是本类的对象
		// this.成员变量  获取本类的成员变量
		// this.成员变量 = "哈哈";  给本类的成员变量赋值
		// this.成员方法  调用本类的成员方法
		// 谁调用了这个方法 谁就是this
    }
}

命名规范 

获取  get + 成员变量名(首字母大写)

修改  set + 成员变量名(首字母大写)

标准写法 set方法 是没有返回值的

    构造方法

构造方法: 对对象的成员变量 进行初始化

写法:

1. 没有返回值位置(void也不用写)

2. 构造方法的方法名 要与 类名 完全一致

构造方法是系统帮你调用的

只要你创建对象 系统就会自动调用构造方法

构造方法 只会执行一遍

class Pen {
	/*
	 * 类中书写顺序
	 * 1.成员变量
	 * 2.构造方法---无参的 有参的
	 * 3.成员方法---sayHi之类的 自己写的
	 * 4.set/get方法
	 */
	private String name;
	private String color;
	
	// 构造方法(无参)
	public Pen() {
		// 初始化成员变量(给成员变量赋值)
		this.name = "圆珠笔";
		this.color = "红色";
		System.out.println("我是pen类的无参构造方法");
	}
	
	// 有参构造方法(构造方法的重载)
	// 为了在创建对象的同时 给成员变量赋值
	public Pen(String name,String color) {
		this.name = name;
		this.color = color;
		System.out.println("我是有参的构造方法");
	}
}
// 介绍自己的方法
	public void sayHi() {
		String name = "linaiang";
		// 使用this 可以区分 成员变量 和 局部变量
		System.out.println(this.name + " " + this.color);
	}