java面向过程,面向对象(成员变量,成员方法)和封装

一.面向过程

注意:一个.java文件中,可以创建多个不同的类,但是使用public修饰的(公共)类,只能有一个,
且这个用public(公共类)修饰的类必须和.java文件的文件名保持一致

面向过程 强调的是过程, 以及过程的执行者
例如:我要去买一台电脑,那么我就要把我的需求列出来:
1.什么牌子的 
2.内存要多少
2.显卡怎样的
......
这些列项是过程,而我是执行者.

二.面向对象

1. 强调的是对象, 对象干什么

由执行者 变成了 指挥者
上述的例子就可以改成这样:找一个懂电脑的,我有什么需求都可以告诉他,由他来完成

2.面向对象的好处:

1.更贴近人的思维(懒人思维)

2.将复杂的问题简单化

3.从事物的执行者转变为事物的指挥者

* 3.类和对象*

Java中最基本的单位是:类

类:对抽象事物的描述(模板)

对象:对抽象事物的具体描述(利用类创造出来的具体事物)

属性(成员变量 实例变量)  用名词来描述

行为((成员)方法 函数)        用动词来描述

代码实例:

public class Kll {
    public static void main(String[] args) {
        //创建一个学生对象
        //类名 对象名 = 初值
        //new 是会在堆内存中开辟一块空间:保存的是成员变量
        //成员方法和函数一样会进栈执行
        //等号前的叫对象的引用(保存对象地址) ,等号后边的才是创建堆内存
        Student stu1 = new Student();
        //为对象的成员变量赋值
        //对象名.属性名 = 值
        stu1.name = "蕾";
        stu1.age = 24;
        stu1.gender = "女";
        //取值
        System.out.println(stu1.name);
        System.out.println(stu1.age);
        System.out.println(stu1.gender );

        //调用成员方法
        //对象名.方法名(参数);
        stu1.sleep();
        stu1.playGame("吃鸡");
        stu1.eat();
        //两个引用 指向同一个对象(堆内存地址)
        Student stu2 = stu1;
        stu2.name = "坡";
    }
}
/*创建
 * 学生类(关键词 class)
 * 属性:姓名 年龄 性别
 * 行为:
 * 吃饭
 * 睡觉
 * 打游戏
 */
class Student {
    //成员变量(属性):类中方法外
    String name;
    int age;
    String gender;

    //成员方法(行为 方法)
    //先不写 static ,其他和函数声明一样
    //吃饭
    public void eat() {
        System.out.println("吃饭");
    }
    //睡觉
    public void sleep() {
        System.out.println("睡觉");
    }
    //打游戏
    public void playGame(String gameName) {
        System.out.println("打"+gameName+"游戏");
    }
}

代码在系统内存运行的部分过程如图:
//堆内存中地址是自己随意写的,不是真实地址
这里写图片描述

三. 封装

1.面向对象的特征:封装 继承 多态

2.封装:

 1.方法本生就是一种封装 

 2.将代码的实现或者属性隐藏起来,不让外界直接访问,对外提供访问的方法(间接访问)
关键词 private(私有)被private修饰的成员变量,只能被本类进行访问

3.JavaBean(实体化)规范

  1.成员变量私有化
  2.提供set/get方法(暂时先用这个方法,后期还有其他方法)

4.代码实例:

public class Kll {
    public static void main(String[] args) {
        Phone ph1 = new Phone();
        //ph1.name = "米5X";
        //ph1.color = "金色";
        ph1.setName("米5X");
        ph1.getName();
        ph1.setColor("金色");
        ph1.getColor();
        ph1.sayHi();
    }
}
class Phone{
    //成员变量私有化
    private String name;
    private String color;

    //私有化之后,需要提供对外的访问方法
    //每一个成员变量需要提供一对访问方法 赋值(set方法) 和 取值(get方法)
    //命名规范 set+成员变量名() 使用的是小驼峰

    //name的set方法
    public void setName(String name) {
        //就近原则
        //name = name 最终成员变量的name被调用赋值时也还是为空

        //解决方法
        //使用关键字 this
        //this.name 表示 本类中的name属性
        //谁调用了这个方法, 这个对象就是this
        this.name = name;
    }

    //name的get方法
    public String getName() {
        return name;
    }

    //color的set方法 道理同name的set方法
    public void setColor(String color) {
        this.color = color;
    }

    //color的get方法
    public String getColor() {
        return color;
    }

    public void sayHi() {
        System.out.println("名字是:"+name+"\t颜色是:"+color);
    }
}

5.对象作为方法的参数

匿名对象(没有名字的对象)

1.省略代码
2.一般可以当做传递的参数来使用

代码实例:

public class Demo05 {
    //函数 修改对象name    参数   对象      姓名
    public static void fun1(Person person, String name) {
        person.name = name;
    }
    public static void main(String[] args) {
        Person p = new Person();
        String name1 = "ling";
        p.name = "lei";
        p.age = 24;
        p.sayHi();
        fun1(p, name1);
        p.sayHi();

        //创建匿名对象
        //new 开辟了三个空间 ,他们之间无关联
        new Person().name = "敲代码";
        new Person().age = 23;
        new Person().sayHi();

        //可以当做参数 减少代码
        //测试方法时使用
        new Person().sayHi();

    }
}

猜你喜欢

转载自blog.csdn.net/KongLingLei_08225/article/details/82025005