java类和对象

目录

  • 面向对象的初步认识
  • 认识类
  • 类的实例化
  • this关键字
  • 对象的构造及初始化
  • 访问限定符

1.面向对象的初步认识

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情

2.认识类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性。

  • 类的定义格式

在Java中定义类时需要用到class关键字。例如:

// 创建类
class ClassName{
    field; // 字段(属性) 或者 成员变量
    method; // 行为 或者 成员方法
}

class是定义类的关键字,ClassName是类的名字,{}中是类的主体。

类中包含类的成员属性(类成员变量)和方法。

属性主要用来描述类,方法主要说明类具有哪些功能,称为类的成员方法。

注意事项:

  1. 类名采用大驼峰
  2. 成员前写法统一为public,后续详细解释
  • 练习(定义一个狗类)

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
    }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
    }
}

注意事项:

  • 一般一个文件当中只定义一个类
  • main方法所在的类一般用public修饰(Ecilpse会默认在public修饰的类当中找main方法)
  • public修饰的类必须要和文件名相同
  • 不要轻易修改public修饰的类的名称,如果需要修改,要借助工具,如下图:

 3.类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型用类类型创建对象的过程,称为类的实例化

在java中采用new关键字,配合类名来实例化对象。

还是上面那个练习,我们实例化对象:

public class Main{
    public static void main(String[] args) {
        PetDog dogh = new PetDog(); //通过new实例化对象
        dogh.name = "阿黄";
        dogh.color = "黑黄";
        dogh.barks();
        dogh.wag();
        PetDog dogs = new PetDog();
        dogs.name = "阿黄";
        dogs.color = "黑黄";
        dogs.barks();
        dogs.wag();
    }
}

用类创建对象的方法:

类名 引用名称 = new 类名();

Person per = new  Person();

注意事项:

  • new关键字用于创建一个对象的实例
  • 使用 . 来访问对象中的属性和方法
  • 同一个类可以创建多个对象

类和对象的说明

类是一种自定义类型,可以用来定义变量,它是一个模型一样的东西,用来对实体进行描述。

类实例化出对象就像现实中使用建筑图纸建出一个房子。

 4.this关键字

为什么有this关键字?首先我们看个例子:

public class Date {
    public int year;
    public int month;
    public int day;

    public void setDate( Date this, int y,int m,int d) {
        //this代表当前对象
        this.year = y;
        this.month = m;
        this.day = d;
    }
    public void print(){
        System.out.println("year: "+year+" month: "+month+" day: "+day);
    }

    public static void main(String[] args) {
        Date Date1 = new Date();
        Date1.setDate(2000,9,9);
        Date Date2 = new Date();
        Date2.setDate(2011,1,1);
        Date1.print();
        Date2.print();

    }
}

我们定义了一个类,实例化了多个对象,

问题一:

当我们调用方法赋值时,你怎么知道在给哪个对象赋值呢?

其实在方法的参数部分有一个隐藏的参数 Date this ,其实我上面已经写出来了,不过平常我们不会写,这是隐藏的参数。

问题二:

方法里面为什么加this,如果不加会怎样?

如果形参名不小心与成员变量名相同,而且不加this,那么输出结果:

可以看到都是0,是默认值,为什么呢? 其实是因为局部变量优先,这段代码的意思就是形参自己给自己赋值。

所以好习惯就是:习惯使用this

总结:

  1. this代表当前对象的引用。谁调用这个方法,this就代表谁。
  2. this只能在"成员方法"中使用
  3.  在"成员方法"中,this只能引用当前对象,不能再引用其他对象

5.对象的构造及初始化

如何初始化对象

1.就地初始化:定义的同时直接赋初值。

class Person{
    //成员变量, 定义在方法外部,类内部的变量
    public String name="张三";
    public int age=19;
    //成员方法
    public void eat() {
        System.out.println(this.name+" 在吃饭!");
    }
    public void show() {
        System.out.println("名字:"+name+" 年龄:"+age);
    }
}
public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
    }
}

当我们不赋初值,直接使用的时候会输出:

原因: 

2.默认初始化:

Person person = new Person();
person.name="李四";
person.age=10;

 对象空间被申请好之后,对象中包含的成员已经设置好了初始值:

 构造方法

构造方法(也称为构造器)是一个特殊的成员方法,

名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

还是以上面那个类为基础:

 public Person() {
        //构造方法
        this.name = "张三";
        this.age = 20;
}

构造方法如何被调用?
我们在刚刚的构造方法里打印一下,然后测试:

结果是:

解释: 

实例化对象的时候,有两步是很关键的:

1.为对象分配内存    2.调用合适的构造方法

之前我们没有写构造方法的时候,也能正常运行,原因是:

如果用户没有显式定义,编译器会生成一份默认的构造方法生成的默认构造方法一定是无参的

构造方法可以有多个,它们之间构成重载关系。

比如我们再写一个构造方法

public Person(String name, int age) {
        this.name=name;
        this.age=age;
        System.out.println("Person(String name, int age)");
    }

 这时候我们再实例化对象就可以直接传参:

public static void main(String[] args) {
        Person person = new Person("孙悟空",500);
        person.show();
    }

 然后当我们屏蔽掉之前不带参数的构造方法时,发现报错了。

注意:一旦用户定义任何一种构造方法,编译器都不再生成。

构造方法中,可以通过this调用其他构造方法来简化代码

 访问限定符

当你不想让别人看到你类中的某个属性,可以用private修饰

这样别人就不能访问了。这就封装起来了,只能在当前类内使用,类外不能使用。 

如果在类外要对封装的属性操作,可以提供公开的方法间接操作:

java提供了四种访问限定符:

 

public:可以理解为一个人的外貌特征,谁都可以看得到

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private:只有自己知道,其他人都不知道
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值