JavaSE个人学习心得(八)

JavaSE个人学习心得(八)

面向对象

首先:面向对象是一种思想,而不是技术

因为这种思想来源于生活, 生活中我们解决问题, 就是一个个的对象在一起打交道从而将问题解决了. 如果写代码的时候,
也能按照这套思想进行操作, 编程就会更加贴切与生活.
例:
解决随机数的问题 —> 找来了Random对象
解决键盘录入的问题 —> 找来了Scanner对象

  • 以什么形式去组织代码
  • 以什么形式去解决问题

对于面向对象
我们要学会如何去设计对象
学习对已用的对象如何使用

类和对象

  • Java中想要创建对象,必须先有类的存在

类 : 是一组相关属性和行为的集合, 将类理解为是对象的设计图
既然类是对象的设计图, 那就是说, 需要根据类, 才能创建出对象

关系 : 依赖关系
需要根据类去创建对象
数量关系
一对多的关系, 根据一个类, 可以创建出多个对象.

类的组成
属性(名词):
		
		成员变量: 跟之前定义变量的格式一样, 只不过位置发生了改变, 类中方法外.

行为(动词):

		成员方法: 跟之前定义方法的格式一样, 只不过去掉了 static 关键字
public class Student {
	String name;
	int age;
	
	public void eat(){
		System.out.println("学生吃饭...");
	}
}

根据类创建对象,对象中的成员如何使用

1. 创建对象的格式

		类名 对象名 = new 类名();
		
		Student stu = new Student();

		// 打印对象名, 会看到对象的内存地址
		// 全类名@十六进制地址值
		// com.itheima.oop.Student@233ac45
		System.out.println(stu);


2. 使用成员变量的格式
    
    	对象名.变量名;

		stu.age = 18;
		
		System.out.println(stu.age);

		if(stu.age >= 18){
            
        }

		for(int i = 1; i <= stu.age; i++){
            
        }


3. 使用成员方法的格式
    
    	对象名.方法名(实际参数);

		stu.eat();
成员变量和局部变量的区别
1. 类中位置不同

		成员变量 : 方法外
		局部变量 : 方法中

2. 初始化值不同

		成员变量 : 有默认初始化值
		局部变量 : 没有默认初始化值, 使用之前必须完成赋值


3. 内存位置不同

		成员变量 : 堆内存
		局部变量 : 栈内存


4. 生命周期不同

		成员变量 : 随着对象的创建而存在, 随着对象的消失而消失
		局部变量 : 随着方法的调用而存在, 随着方法的弹栈而消失


5. 作用域
		
		在自己所属的大括号中有效	

this 关键字
this作用 :
		
			引入: 可以区分局部变量和成员变量的重名问题
			
						如果局部变量和成员变量出现了重名问题, Java 会根据就近原则, 优先使用局部变量
						非要使用成员变量的话, 可以使用this进行区分
						
						
						class Student {
							int num = 10;
							
							public void show(){
								int num = 20;
								System.out.println(num);   		// 20 ---> 局部变量
								System.out.println(this.num);   // 10 ---> 成员变量
							}
						}
			
			作用: 可以调用自己本类的成员
                
                		this.本类成员变量;
                		this.本类成员方法();

this概念:
this代表当前类对象的引用(地址), 哪一个对象调用的方法, 方法中的this, 就代表哪一个对象.

				stu1.show() ----> this ---> stu1的地址
				stu2.show() ----> this ---> stu2的地址
构造方法
构造方法 \ 构造器 

	介绍 : 构建,创造一个对象的时候, 要执行的方法.
	
	格式 :
			1. 方法名与类名相同,大小写也必须一致
			2. 没有返回值类型,void都没有
			3. 没有具体的返回值(不能通过return语句, 带回结果数据)
			
	执行时机:
			1. 在创建对象的时候被系统自动调用执行
			2. 每创建一次对象, 就会执行一次构造方法
			
	作用:
			1. 本质作用 : 创建对象
			2. 结合执行时机 : 可以在创建对象的时候, 给成员变量初始化
			
					Student stu = new Student("张三", 23);
					
	注意事项:
			1. 如果一个类中没有给出任何构造方法, 系统将会提供一个 [默认的] [无参数的] 构造方法
			2. 如果手动编写过构造方法, 系统将不会再提供那个默认的无参构造了
					建议: 今后 [无参] [带参] 都手动给出.
					
			3. 构造方法不允许手动调用
			
					stu.Student();  // 不允许, 编译错误
封装
面向对象三大特征 :

		1. 封装
		2. 继承
		3. 多态
		
封装:
		**隐藏实现细节, 仅对外暴露公共的访问方式**
		
		封装在代码中常见的体现:
		
			1. 将属性抽取到类中, 这是对数据进行的封装
			
					用户信息: 001, 张三, 23, 1561111JQKA, 北京
					
					没有使用封装:
					
						String id = "001";
						String name = "张三";
						int age = 23;
						...
						
					使用封装:
					
						class User {
							String id;
							String name;
							int age;
							String tel;
							String address;
						}
						
						User u = new User("001","张三",23,"1561111JQKA","北京");
						
						感受: 原来是一些零散的变量, 现在是整体的对象了
                            
                            
              2. 将代码抽取到方法中, 这是对代码功能进行的封装
                            
                      程序员A : 写好了一个方法
                          
                          public void printArray(int[] arr){
                          	  // 遍历打印数组的代码
                      	  }

					  程序员B : 只需要关注方法能干什么, 以及怎么调用即可, 内部的实现, 都不需要关心
                          
                      情况: 程序员A, 对遍历打印数组的代码, 进行了封装
权限修饰符
权限修饰符可以用于修饰成员(成员变量, 成员方法, 构造方法)
    
private : 同一个类中
(default) : 同一个类中, 同一个包
protected : 就业班讲
public : 任意位置访问
    
    
今后最常用的:  private, public

标准JavaBean

  1. 所有成员变量私有化

  2. 提供出[空参][带参]构造方法

  3. 针对于私有的成员变量, 提供出setXxx\getXxx方法

package com.itheima.test;

public class Student {
    // 属性: 姓名, 年龄
    private String name;
    private int age;

    // 行为: show --> 展示自己的个人信息
    public void show(){
        System.out.println("姓名为:" + name + ", 年龄为:" + age);
    }

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值