Java类与对象

Java是一门面向对象语言,不同语言在面向对象这部分思想是几乎相同的,但具体细节又有所不同,下面我将来介绍Java面向对像中的类与对象。

1面向对象的初步认识

1.1 什么是面向对象

       在我们刚开始接触编程时,我们是面向过程编程。面向对象是一种编程思想,主要是依靠对象之间的交互来解决问题,也就说我们没有必要关注具体怎么实现。举个例子来说:洗衣服,要是按照我们以前的想法就是,洗衣服要先拿个盆将衣服放到里面,放入洗衣粉,手搓.....最后晾晒。这个过程十分十分复杂,这就是面向过程编程。如果我们是面向对象的思想,我们要做的就是将衣服放入洗衣机,倒入洗衣粉,剩下的交给洗衣机,这就是面向对象,处理问题起来十分简便。

2 类的定义和使用

2.1  简单认识类

       我们有一句话叫物以类聚,这个类就是指一类东西,当我们提到老虎,豹子时,我们会将他们归为猫科动物,当我们提到野猪,香猪等我们会将他们归为猪类。总的来说一个类会有很多个体,类是一个模板

2.2  类的定义格式

在Java中定义一个类要用到class这个关键字,定义格式如下:

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

//class为关键字,ClassName为类的名字,{}为类的主体。
//属性主要是来描述类的,成为类的属性或者类成员变量。方法主要是来说面类具有哪些功能,成为类成员方法。

 那么我们来定义一个狗类代码如下:
 

public class Dog {
    public String name;
    public int age;
    public String color;
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void drink(){
        System.out.println("喝水");
    }
}

上面就是一个简单的狗类。

3  类的实例化

3.1  什么是类的实例化和实例化举例

定义一个类在计算机中就相当于定义了一种新的类型。创建一个对象就是实例化,在Java中实例化要用到new这个关键字。当我们实例化一个对象后,可以访问类里面的成员属性和方法。用点的方式来访问,一个类可以实例化多个对象。下面我用代码来掩饰一下,还是用上面创建的狗类为例子
 

public class Dog {
    public String name="大黄";
    public int age=8;
    public String color="黄色";
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void drink(){
        System.out.println("喝水");
    }

    public static void main(String[] args) {
        Dog dog=new Dog();
        System.out.println(dog.age);
        System.out.println(dog.name);
        System.out.println(dog.color);
        dog.drink();
        dog.eat();
        dog.sleep();
    }
}

//下面是运行结果
//8
//大黄
//黄色
//喝水
//吃饭
//睡觉

4  this引用

this引用我就不像前面分小标题了,直接在这个标题下说完。
this翻译过来的意思是:这个。
它的作用是用来让你实例化的对象指向它应该有的位置,语言上说不好理解,用代码说明来看。
 

//写一个方法给成员变量赋值
public void func(int a,String b,String c){
    age=a;
    name=b;
    color=c;
}
//接下来实例化
Dog dog=new Dog();
dog.func(10,"小黄","黄色");

上面这段代码是简化代码,可以通过这种方式给成员变量赋值,但是当形参不再是a,b,c而是和成员变量重名,便不能给成员变量赋值,代码如下:
 

public void func(int age,String name,String color){
    age=age;
    name=name;
    color=color;
}
Dog dog=new Dog();
dog.func(10,"小黄","黄色");

此时代码的运行结果为(0,null,null)我的意思是分别调用这些成员变量时的结果。这里补充一下成员变量默认初始化,如果是引用类型,默认值是null,如果是简单类型,默认值是0。这里也说一下为什么没有赋值成功 ,我们age,name,color他们都是形参,进到该参数里面,出了方法就销毁了,并没有给成员变量赋值。如果我们能在他们前面加上this,那么就不会出现赋值不了的情况,代码如下:
 

public void func(int age,String name,String color){
    this.age=age;
    this.name=name;
    this.color=color;
}
Dog dog=new Dog();
dog.func(10,"小黄","黄色");

 通过这种方式就可以赋值成功。那么我们就可以得出this的作用:this是指向当前对象的引用,那个对象调用,那个对象就会有值,实例化的时给的值不同,对象空间的值也不同。
this引用要注意的地方:
1.this引用只能在成员方法中使用
2.在成员方法中,this只能引用当前对象,不能再引用其他对象。

5.  构造方法

构造方法也是一种特殊的构造方法,它没有返回值,必须与类名的名字相同,由编译器自动调用,并且在对象的生命周期中只调用一次。构造方法可以重载,根据参数不同在实例化的时候,传的参数也不同。下面我用代码来展示:
 

public class Dog {
    public String name;
    public int age;
    public String color;
    //无参数的构造方法
    public Dog(){
        this.name=name;
        this.age=age;
        this.color=color;
    }
    //有参数的构造方法
    public Dog(int age,String name,String color){
        this.name=name;
        this.age=age;
        this.color=color;
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void drink(){
        System.out.println("喝水");
    }

    public static void main(String[] args) {
        Dog dog=new Dog();
        Dog dog1=new Dog(10,"小黄","黄色");
    }
}

当我们自己不写构造方法时,编译器会自动生成不带参数的构造方法。一旦自己写构造方法时,编译器便不再自动生成不带参数的构造方法。
就地初始化其实就是在创建成员变量的时候就初始化。

6  封装

6.1  封装的概念

面向对象有三大特性分别是继承、封装、多态。所谓封装就是将数据和操作数据方法进行有机结合,隐藏对象的属性和实现细节,进对外公开接口来和对象进行交互。

6.2访问权限符

public  它的权限最大不同包不同类中都可以进行访问。一旦被public修饰都可以访问。
private  它的访问权限最小,一旦被private修饰,只能在本类中访问,但是其他类想要访问也可以,在本类中写一个方法,访问权限为public将被private修饰的变量返回出来。
上面两个访问权限是两个极端,还有两个处于中间
default  它的意思是默认,在修饰时不写,它的访问权限是同一个包的不同类。
protected主要是用在继承中,继承部分详细介绍。

6.3  包的概念

包是对类,接口等封装机制的体现,是一种对类或者接口等的很好的组织方式,在同一个工程中可以存在名称相同的类,只要在不同的包中。在之前我们其实已经接触过包的概念,我们在学习在键盘上输入时,写过这样代码 import Java.util.Scanner;这就是导包。这和python中倒入模块很像。在集成开发环境中,创建包在src这个文件下创建包,包的名字一般是域名的大写。当我们创建一个包时,在包下面创建一个Java文件,会在最上方出现package加文件夹路径的的字样,文件夹路径一般是域名的逆置。

6.4  包访问权限

包访问权限就要和访问权限符相结合,就是在6.2说的,不遵循那些规则就会报错。

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值