JavaSE——面向对象(一)(对象,类,成员变量,局部变量,匿名对象,封装private,this关键字)

1.面向过程与面向对象
  • 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求,所以在面向过程开发中,每一步的过程都很重要,当其中有一步出错时,都不能达到目的,当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,所以我们就需要一种更方便的方式。
  • 这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
  • 举例:洗衣服
    面向过程:脱衣服——节水——浸泡——揉搓——漂洗——晾干
    面向对象:直接用洗衣机,一键洗衣。
2.对象与类
  • 现实生活中由好多事物,比如一个学生,一个人,一棵树等等,而Java语言中的类就相当于一个事物,现实生活中每个事物都有它所对应的属性和行为,比如一个人他有姓名,年龄,职业这些就是属性,他每天还要睡觉,吃饭这些就是行为,对应到类中就是成员变量和成员方法。
  • 所以定义一个类就是定义它的成员变量和成员方法。
  • 而对象是该类事物的具体体现,比如学生就是是一个类,而班长就是一个对象。
  • 创建对象:类名 对象名 = new 类名();
  • 访问类中的成员变量和方法:对象名.变量名,对象名.方法名。
  • 例一:创建一个学生类,然后画出内存图
package org.westos.demo;
public class Test1 {
    public static void main(String[] args) {
        student st = new student();
        st.name="李四";
        st.age=12;
        student st1 = new student();
        st1.name="王五";
        st1.age=23;
        student st2=st;
        st2.name="嘻嘻";
        st2.age=45;
        System.out.println(st.name);//嘻嘻
        System.out.println(st.age);//45
        System.out.println(st1.name);//王五
        System.out.println(st1.age);//23
        System.out.println(st2.name);//嘻嘻
        System.out.println(st2.age);//45
    }
}
class student{
    String name="张三";
    int age;
}

内存图如下,通过内存图,我们就能很好的理解
在这里插入图片描述

  • 例二:当一个方法的形参是一个类类型时
package org.westos.demo4;
public class MyTest {
    public static void main(String[] args) {
        String name="张三";
        int age=20;
        Student student = new Student();
        test(name,age,student);//传该类的一个对象
        System.out.println(student.name);//张三
        System.out.println(student.age);//20
    }
    public static void test(String name,int age,Student student){ //形参时类类型时
        System.out.println(student);
        System.out.println(student.name);//李四
        System.out.println(student.age);//23
        student.name=name;
        student.age=age;
    }
}
class Student{
    String name="李四";
    int age=23;
}
3.成员变量和局部变量不同(很重要)
  • 位置不同
    • 成员变量在类中方法外
    • 局部变量在方法定义中或方法声明中
  • 在内存中的位置不同
    • 成员变量在堆内存中
    • 局部变量在栈内存中
  • 生存周期不同
    • 成员变量随着对象的创建而创建随着对象的回收而消失
    • 局部变量随着方法的调用而产生,随着方法的调用结束而消失
  • 初始化值不同
    • 成员变量有初始化默认值
    • 局部变量没有初始化默认值,必须定义,赋值然后才能 使用
4.匿名对象

匿名对象:就是没有对象名的对象,
使用场合:
(1)调用方法,仅仅只调用一次的时候
(2)还可以作为实际参数传递

package org.westos.demo;

public class MyDemo4 {
    public static void main(String[] args) {
        dog d1 = new dog();
        d1.show();

        new dog().show();
        String name = new dog().name;           //匿名对象也可以调用成员变量和方法,这个方法只需要调用一次时,也可以用
        test(new dog());
    }
    public static void test(dog dog1){
        dog1.show(); //匿名对象作为参数传递,移后会经常用到
        }
    }

class dog{
    String name="小小";
    public static void show(){
        System.out.println("嘻嘻嘻");
    }
}
5.封装

(1)封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
(2)private关键字

private是一个权限修饰符,可以修饰成员变量和成员方法,但被其修饰的成员只能在本类中被访问。

(3)priavte常见的应用

(1):把成员变量用private修饰
(2):提供对应的getXxx()和set3xx()方法
//写一个学生类,其中包含name和age用private修饰,写出set和get方法
package org.westos.demo5;
public class Student {
    private String name;
    private int age;
    public void setName(String name1){
        name=name1;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age1){
        age=age1;
    }
    public int getAge(){
        return age;
    }
}
5.this关键字
  • 由来
//当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题。
//例如,以上面的那个代码为例
public class Student {
    private String name;
    public void setName(String name){
        name=name;//这样就会出错,
    }
}
  • this关键字的特点
this 代表本类的一个引用,你可以认为this代表的是一个本类对象,哪个对象调用这个方法,那么方法中的this就代表谁。
  • 举例
//写一个学生类,用private修饰成员变量,成员变量和局部变量写一样,用this关键字,并给出测试。
package org.westos.demo5;
public class Student {
    private String name;
    private int age;
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
}
//测试
package org.westos.demo5;
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("张三");
        student.setAge(20);
        System.out.println(student.getName());
        System.out.println(student.getAge());
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值