JAVASEday04面向对象

什么是面向对象

众所周知,java是一门面向对象的编程语言,但什么是面向对象呢?简单的说,面向对象是一种思想,他和面向过程是对应的,面向过程强调的是功能行为,面向对象将功能封装进对象,强调具备了功能的对象,面向对象是基于面向过程的。
有一个故事,把大象放进冰箱里,分三步:1打开冰箱,2把大象放进冰箱里 3关上冰箱,这三个动作强调的是过程,即打开动作,存储大象的动作,关闭动作,而用面向对象的思想考虑这个问题,我们分析 无论是打开,存储还是关闭,它们都是冰箱所具备的行为,我们只要操作冰箱中对应的功能,我们把这些行为定义到冰箱中,我们看到色不再是打开,存储,关闭了,我们看到的只是一个事物冰箱,冰箱里有打开,存储,关闭动作,相当于把功能封装到事物中,只要找到这

在这里插入图片描述
总结:

  • 面向对象是一种思想
  • 面向对象能让负责问题简单化
  • 面向对象能让我们的角色从执行者变成指挥着

面向对象的三个特征:封装,继承,多态。面向对象编程实际上是找对象使用,没有对象就创建一个对象,过程为:找对象–>建立对象–>使用对象–>维护对象
类与对象的关系:
类就是对现实生活中事物的描述,对象就是这类事物实实在在存在的个体。比如
现实生活中的对象:张三,李四,想要描述,提取对象的共性内容,对具体的抽象,描述时,这些对象的共性有:姓名,年龄,性别。映射到java中,描述就是class定义的类,具体对象就是java在堆内存中new建立的实体

类和对象

java面向对象有两个重要的概念,类和对象(或实例),类是某一类对象的抽象,对象是类的具体体现,从这个意义上看,日常所说的人,是人的实例而不是人类。
1.定义类
java语言定义类的语法
在这里插入图片描述
对一个类定义而言,包含三个常见成员,构造器,成员变量歌方法。

  • 成员变量用来定义该类或该类所包含的状态数据
  • 方法用来定义该类或该类的实例的行为特征或者功能实现
  • 构造器用于构造该类的实例,java通过new关键字调用构造器
    类和各成员之间定义顺序没有影响,各成员之间可以相互调用,但是static修饰的成员不能访问没有static修饰的成员

2.定义成员变量和方法
成员变量定义的语法格式:
在这里插入图片描述
方法定义的语法格式:
在这里插入图片描述
static是一个特殊的关键字,可用于修饰方法,成员变量等成员,static修饰的成员表示它属于这个类本身,而不属于该类的单个实例,通常把static修饰的成员变量或方法称为类成员或类方法,不通过static修饰的普通方法,成员变量则属于该类的单个实例,而不属于该类。
构造器是一个特殊的方法,定义构造器的语法与定义方法的格式很像
在这里插入图片描述
需要注意的是,构造器既不能定义返回值类型, 也不能用void声明构造器没有返回值,如果为构造器定义了返回值类型,或者用void声明它没有返回值,那么java将把它当作方法来处理,就不再是构造器了。
3.定义对象
创建对象的途径是构造器,通过new关键字调用某个类的构造器即可创建该类的实例

Person p=new Person();

创建好对象,就可以使用对象了,java中对象大致有如下作用:

  • 访问对象的实例变量
  • 调用对象的方法
    4.调用
    如果权限允许,类里定义的成员变量或方法都可以通过类或实例来调用,类或实例访问成员变量的方法或语法是;类.类变量|方法,或者实例.实例变量|方法,在这这种方法中,类或实例是主调者
    static修饰的方法或者成员变量,既可以通过类来调用,也可以通过实例来调用,没有使用static修饰的成员发放和变量,只可通过实例来调用,
P.name ="张三";
P.say("java很简单");
System.out.println(P.name);

5.对象和引用
在上面有一行这样的代码 Person p=new Person();它创建了一个Person实例,这个对象赋值给p变量,这行代码产生了p变量和Person对象。Person对象包含了两个实例变量name和age,因此创建对象是应该有内存存储实例变量
在这里插入图片描述
Person对象由多块内存组成,不同没存存储了Person对象的不同成员变量,把这个对象赋值给一个引用变量时,让引用变量指向这个对象即可,也就是说引用变量存放的仅仅是一个引用,它指向实际的对象。
类也是一个引用,定义的Person类型变量实际上是一个引用,它存放在栈内存里,指向实际的Person对象,真正的Person对象则放在堆内存中
在这里插入图片描述
当一个对象创建成功后,保存在堆内存中,Java不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。
7.对象的this引用
java中提供了this关键字,this关键字总是指向调用该方法的对象,根据this出现的位置不同,this作为对象默认引用有两种情形

  • 构造器中引用该构造器正在初始化的对象
  • 在方法中引用调用该方法的对象
class Dog{
public void jump(){
System.out.println("正在执行jump方法");
}
public void run(){
Dog d=new Dog();
d.jump();
System.out.println("正在执行run方法");
}
}

提供另一个类创建Dog对象

public class DogTest {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.run();
    }
}

在上面两段代码中,产生了两个Dog对象,这就产生了问题,一个是在run方法中调用jump方法是否需要一个Dog对象,二一个是否需要重新创建一个Dog对象,第一个问题是肯定的,因为没有stat次修饰的成员变量和方法都必须使用对象调用,第二个问题答案是否定的,当程序调用run方法时,就会提供一个Dog对象,就可以直接使用已经存在的Dog对象,无需重新创建,将上面的Dog类的run方法改成这样会更好

public void run(){
this.jump();
System.out.println("正在执行run方法");
}

java中也可以省略this关键字

public void run(){
jump();
System.out.println("正在执行run方法");
}

这样也是正确的
何时使用this
大部分时候,普通方法访问成员变量或方法无需使用this,但方法中有个局部变量和成员变量同名,但程序又需要在这个方法里访问被覆盖的成员变量时,就必须使用this。除此之外,this还可以用在构造器中作为默认引用,

public class Test {
    public int foo;
    public Test(){
        int foo=0;
        this.foo=5;
    }

    public static void main(String[] args) {
        System.out.println(new Test().foo);
    }
}

在构造器使用this引用时,this总是引用该构造器初始化的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值