6.1Java面向对象(上)

Java面向对象(上)

面向对象思想概述

通过调用对象,来对一些步骤与功能封装好的类完成对应复杂的操作。而不是面向过程一步一步的实现需求。
面向过程:强调的是每一个功能的步骤。
面向对象:强调的是对象,然后由对象取调用功能。
		特点:是一种符合我们思考习惯的思想;
			 可以将复杂的事情简单化;
			 让我们从执行者变成了指挥者;

类与对象

我们如何表示现实世界的事物呢?
	A:属性  就是事物的描述性息
	B:行为  就是事物能做什么
	
	类: 	 是一组相关属性和行为的集合;
	对象:    就是该事物的具体表现

类的定义

类的定义:类是用来描述现实事物的
	事物:属性
	 	 行为

类如何和事物进行对应的呢?
	类: 成员变量
        成员方法

成员变量与普通变量的区别:
	位置不同:定义在类中并且在方法外;
	初始值:成员变量不需要给初始化值也可以使用,因为他有默认值;
	
成员方法与普通方法区别:
	去掉了修饰符中的static关键字;
	
定义一个学生类;
public class Student {
    String name;
    int age;
    public void study(){
        System.out.println("学习");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

类的使用

类的使用:
	其实就是使用该类的成员(成员变量和成员方法)
	
	我们想要使用一个类的成员,必须要先拥有该类的对象。
	如何拥有一个类的对象?
		创建一个类的对象(格式: 类名  对象名 = new 类名() )
		成员变量: 对象名.成员变量
		成员方法:对象名.成员方法
public class StudentTest {  
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println("s:"+s);	//s:com.scy.Student@1b6d3586在堆内存中地址
        System.out.println(s.name);  // 堆内存中有初始值 null
        System.out.println(s.age);	//  0
        s.eat();
        s.study();
        s.name = "姚明";
        s.age = 20;
        System.out.println(s.name);
        System.out.println(s.age);
    }
}

对象内存图

一个对象的内存图:

在这里插入图片描述

两个对象的内存图:

在这里插入图片描述

两个对象指向同一个堆内存(跟两个数组指向一个堆内存一个道理)

在这里插入图片描述

成员变量和局部变量的区别

成员变量与局部变量区别:
	1.在类中的位置不同
		成员变量:在类中,方法外;
		局部变量:在方法内或者方法声明上(形式变量);
		
	2.在内存中的位置不同
		成员变量:在堆内存中;
		局部变量:在栈内存中;
		
	3.生命周期不同
		成员变量:随着对象创建而存在,随着对象消失而消失;
		局部变量:随着方法调用而存在,随着方法调用完毕而消失;
	
	4.初始化值不同
		成员变量:有默认初始值;
		局部变量:必须先赋值后使用;

private关键字

直接使用对象名访问成员变量,会存在数据安全问题;
使用private关键字实现保证数据安全;
private:
	是一个修饰符;
	可以修饰成员变量和成员方法;
	被private修饰的成员只在本类中才能访问
针对被private修饰的成员变量,我们会相应的给出getXxx()和setXxx()用于获取和设置成员变量值
方法用public修饰
public class Student {
    private String name;
    private int age;
    public void setAge(int a){
        if (a<0 || a>200){
            System.out.println("给出年龄有误");
        }
        else {
            age = a;
        }
    }
    public int getAge(){
        return age;
    }

封装

封装的概述:面向对象三大特征之一
	是面向对象编程语言对客观世界的模拟,客观世界里的成员变量都是隐藏在对象内部的,
	外界无法直接进行操作和修改。
	
封装的原则:
	将不需要对外提供的内容都隐藏起来
	把属性隐藏,提供公共方法对其访问
		private,提供对应的getXxx()/setXxx()访问

好处:通过控制成员变量的操作提高代码安全性;把代码用方法进行封装提高了代码的复用性。

this关键字

public class Student {
    private String name;
    private int age;
    public void setAge(int age){
        if (a<0 || a>200){
            System.out.println("给出年龄有误");
        }
        else {
        	// age = age;
            this.age = age;
        }
    }
    public int getAge(){
        return age;
    }
代码需要坐待参数名能够“见名知意”;但是如果改成一样就不知道哪个是形式参数,
哪个是对象的成员变量。所以用this关键字来指定对象的成员变量;
	this:代表所在类的对象引用
		 方法被哪个对象调用,this就代表谁

构造方法

用于给对象数据进行初始化
格式:
	方法名与类名相同;
	没有返回值类型,连void都不能写;
	没有具体的返回值;

通过 new 来调用构造方法
public class Student {
    public Student(){
        System.out.println("构造方法");
    }
}
public class StudentTest {
    public static void main(String[] args) {
        Student std = new Student();
    }
}
构造方法的注意事项:
	1.如果我们没给出构造方法,那么系统会给一个默认的无参数构造方法;
	2.如果我们给出了构造方法,系统将不再提供默认的构造方法,
		这个时候我们必须自己提供无参构造方法;
	3.构造方法是可以重载的;
public class Student {
    private String name;
    private int age;
    public Student(){
        System.out.println("构造方法");
    }
    public Student(String name){
        this.name = name;
    }
    public Student(int age){
        this.age = age;
    }
    public Student(int age,String name){
        this.age = age;
        this.name = name;
    }
}

标准类的代码写法与测试

类
	1.成员变量(被private修饰)
	2.构造方法 (无参构造方法与带参构造方法)
	3.成员方法
		getXxx()
		setXxx()
	给成员变量赋值的方式
		1.无参构造方法+setXxx()
		2.带参构造方法
package com.scy;

// 标准的学生类

public class Student {
    //1.成员变量
    private String name;
    private int age;
    //2.构造方法--无参
    public Student(){}
    //构造党法--带参
    public Student(int age,String name){
        this.age = age;
        this.name = name;
    }
    //3.成员方法
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return age;
    }
}
package com.scy;
// 标准类的测试类

public class StudentTest {
    public static void main(String[] args) {
        // 无参构造方法+setXxx()
        Student std = new Student();
        std.setAge(10);
        std.setName("wang");
        System.out.println(std.getAge()+"---"+std.getName());
        // 带参构造方法
        Student std2 = new Student(11,"liu");
        System.out.println(std2.getAge()+"---"+std2.getName());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值