自学java第四天——面向对象基础语法(类,地址,构造器,this关键字,封装,标准javabean,局部变量)

面向对象:找对象或者设计对象来解决问题。

(1)定义类

类:是对象共同特征的描述。

对象:是真实存在的具体实例。

在java中,必须先设计类,才能创建对象并使用。

public class 类名{
    1,成员变量(代表属性,一般是名词)
    2,成员方法(代表行为,一般是动词)
    3,构造器
    4,代码块
    5,内部类



}

先创建类:

package day4;

public class car {
    String name;
    double price;
    public void start(){
        System.out.println(name+"启动了");
    }
    public void run(){
        System.out.println("价格是:"+price+"的"+name+"跑的很快");

    }
}

再创建对象:

package day4;

public class oop1 {
    public static void main(String[] args) {
    //创建汽车对象
        car c = new car();
        c.name="宝马";
        c.price=34.78;
        System.out.println(c.name);
        System.out.println(c.price);
        c.start();
        c.run();


    }
}

输出结果:

定义类的几个补充事项:

1:  类名最好大写,不能用关键字,必须是合法标识符

2:建议一个代码文件只定义一个类,比较规范

3:成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;

一般无需指定初始化,存在默认值。

默认值的规则:

byte short int long -----0

double float-----0.0

boolean----false

String----null

(2)对象在内存中的运行机制

多个对象的内存图:

*对象存放在new---堆内存中

*Car c = new Car()    c里面存储的是对象在堆内存中的地址

*成员变量(name,price)的数据放在对象里,存在堆内存中

两个变量指向同一个对象:

(赋值的是地址!!)

package me;

public class test {
    public static void main(String[] args) {
        //创建学生对象
        Student s1=new Student();
        s1.name="小明";
        s1.hobby="打球";
        s1.sex='男';
        s1.study();
        //把s1变量赋值给一个学生类型的变量s2
        Student s2=s1; //赋值的是s1里存储的对象地址,即s1和s2里的地址相同。
        System.out.println(s1);
        System.out.println(s2);
        s2.hobby="爱睡觉";
        System.out.println(s1.hobby);

    }
}

运行结果

 (3)构造器

构造器是定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。

调用构造器得到对象的格式:

类 变量名称 = new 构造器;

Car c = new Car();

无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。

Car c1=new Car("奔驰",39.8);

有参数构造器:在初始化对象的时候,同时可以接受参数为对象进项赋值。

package ac;

public class Car {
    String name;
    double price;


    //无参数构造器
    public Car(){
        //调用无参数构造器
        System.out.println("调用无参数构造器");



    }
    public Car(String n,double p){
        //调用无参数构造器
        System.out.println("调用有参数构造器");
        name=n;
        price=p;


    }
}
package ac;

public class test {
    public static void main(String[] args) {
        //通过调用构造器得到对象
        Car c = new Car();
        c.name="小明";
        c.price=2356;
        System.out.println(c.name);
        System.out.println(c.price);


        //调用有参数构造器
        Car c2 =new Car("奔驰",456);
        System.out.println(c2.name);
        System.out.println(c2.price);



    }
}

输出结果

 构造器的注意事项:

*任何类定义出来,默认就自带了无参数构造器,写不写都有。

*一旦定义了有参数构造器,那么无参数构造器就没有了,如何还想使用无参数构造器,此时就需要自己手写一个无参数构造器了。

构造器的作用:初始化对象,并返回对象地址

构造器有两种:无参数,初始化对象时,成员变量的数据均采用默认值。

                         有参数,初始化对象时,同时可以接收参数为对象赋值。

(4)this关键字

this关键字代表当前对象的地址。

package asd;

public class Car {
    public Car(){
        System.out.println("无参数构造器中的this:"+this);

    }
    public void run(){
        System.out.println("这是方法中的this:"+this);
    }
}
package asd;

public class test {
    public static void main(String[] args) {
        //this 关键字的作用
        //创建car对象
        Car c=new Car();
        c.run();

        System.out.println(c);

    }
}

 this关键字的作用:

*可以用于指定访问当前对象的成员变量,成员方法。

*this出现在成员方法中的用法。

(5)封装

面向对象的三大特征:封装,继承,多态。

封装告诉我们。如何正确设计对象的属性和方法。

封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。

人关门,”关“是门的一种方法,状态,关门是门的方法,而不是人的方法。

成员变量 使用 private 修饰,只能在本类中访问了。
package ace;

public class Stu {
    // 成员变量 使用 private 修饰,只能在本类中访问了。
    private int age;
    //提供 getter 和 setter 方法暴露其取值和赋值
    public void setAge(int age){

        if(age>=0 && age<=200){
            this.age=age;
        }
        else{
            System.out.println("您的年龄有问题");
        }


    }
    public int getAge(){
        return age;
    }
}

 

package ace;

public class test1 {
    public static void main(String[] args) {
    Stu s=new Stu();
    s.setAge(23);
        System.out.println(s.getAge());

    }
}

如何进行更好的封装:

*把成员变量使用private 隐藏起来,对外就不能访问了

*提供public修饰的getter 和setter方法暴露其取值和赋值

(6)标准javaBean

也可以称为实体类,其对象可以用于在程序中封存数据。

 JavaBean 是可以用快捷键完成的,鼠标单击右键选择Generate 。。。

package javabean;

public class User {
    //成员变量建议使用 private 私有定义
    private String name;
    private double height;
    private double salary;

    public User() {
    }


    //构造有参数构造器

    public User(String name, double height, double salary) {
        this.name = name;
        this.height = height;
        this.salary = salary;
    }


    //必须为成员变量提供成套的 setter 和 getter 方法

    public String getName() {
        return name;
    }

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

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

 

 

package javabean;

public class test {
    public static void main(String[] args) {
        //无参数构造器创建对象封装一个用户信息
        User u1=new User();
        u1.setHeight(111);
        u1.setName("小王");
        u1.setSalary(1233);
        System.out.println(u1.getHeight());
        System.out.println(u1.getName());

        //有参数构造器创建对象封装一个用户信息
        User u2=new User("zhang",123,3456);
        System.out.println(u2.getName());
        System.out.println(u2.getHeight());
        System.out.println(u2.getSalary());

    }
}

输出结果

(7)成员变量和补充变量的区别

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值