美文网首页
掌握这些面向对象的核心技术,包你面试无忧!

掌握这些面向对象的核心技术,包你面试无忧!

作者: Java柚子 | 来源:发表于2020-11-08 16:35 被阅读0次

面向对象简介

面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,然后用函数把这些步骤一步步的实现,使用的时候一个个依次调用就好。而面向对象,是一种以“对象”为中心的编程思想,把问题看成一个个对象,通过对象的属性和行为,将问题解决的。面向过程强调的是模块化,而面向对象强调的是把事物对象化。

复杂来说面向对象是以“对象”为基本单元构建系统,对象是把数据和数据操作方法放在一起,作为一个相互依存的整体。把同类的对象抽象出其共性,形成类。所以说类是对象的抽象,对象是类具体化的体现(类是大范围的,一个类可以有多个对象),类中的大多数数据只能通过本类的方法实现,类包含说明和实现,说明部分被外界所看到,通过简单的外部接口与外界进行联系;实现部分不被外界所看到,在内部通过不同方法的构建,实现不同的功能。对象与对象之间通过消息进行沟通,程序流程由用户在使用中决定。

面向对象用以解决越来越复杂的需求,提高了软件的重用性,灵活性和拓展性。

开始之前,记得点赞收藏加关注哦 ,需要下载PDF版本和更多知识点、面试题的朋友

可以加q群:799215493   备注:简书   免费领取~

static关键字

static表示“静态”的意思,可以用来修饰成员变量和成员方法。 static的主要作用在于创建独立于具体对象的域变量或者方法 简单理解: 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问, 并且不会因为对象的多次创建而在内存中建立多份数据。

静态成员 在类加载时加载并初始化。

无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )

在访问时: 静态不能访问非静态 , 非静态可以访问静态 !

静态方法调用的三种方式:

new xx().静态(); //使用对象调用,不推荐

xx.静态(); //类名调用,正规调用方法,推荐

静态(); //本类的静态方法在本类调用,直接调用

注意事项:

在同包不同类调用的时候,可以直接 类名.方法() 调用,无需创建对象。

在不同包调用的时候,需要引包再调用。

代码示例:

package com.vedio.highobject;

public class Pool {

    public static int water=0;//静态变量

    public static void outlet() {//放水

        if(water>=2) {

            water=water-2;

        }else {

            water=0;

        }

    }

    public static void inlet() {//进水

        water=water+3;

    }

    public static void main(String[] args) {

        System.out.println("水池的水量:"+water);

        System.out.println("水池注水两次。");

        Pool.inlet();

        Pool.inlet();

        System.out.println("水池的水量:"+water);

        System.out.println("水池放水一次。");

        Pool.outlet();

        System.out.println("水池的水量:"+water);

    }

}

注意:在类中调用静态方法和静态方法时,需要使用类名.变量名或类名.方法名调用,在本类中调用静态方法和静态方法时,可以不加类名。

instanceof关键字

只有存在继承关系,才能使用instanceof关键字,否则会报错

代码示例:

//只有存在继承关系,才能使用instanceof关键字,否则会报错

public class Computer {//电脑类

    public static void main(String[] args) {

        Pad ipad=new Pad();

        LenovoPad lenovoPad=new LenovoPad();

        System.out.println("Pad是否继承自电脑?"+(ipad instanceof Computer));

        System.out.println("LenovoPad是否继承自Pad?"+(lenovoPad instanceof Pad));

        System.out.println("Pad是否继承自LenovoPad?"+(ipad instanceof LenovoPad));

      // System.out.println("Pad是否继承自人类?"+(ipad instanceof Person));//ipad与Person这个类没有任何的继承关系

    }

}

class Pad extends Computer{//平板电脑

}

class LenovoPad extends Pad{//联想平板电脑

}

public class Person {

    public Person(String name){

        System.out.println("您好,我叫"+name);

    }

}

ipad和Person两个类没有任何继承关系,所以使用instanceof时,会直接报错。

euqals()方法

查看equals()源码,如下

public boolean equals(Object obj) {

        return (this == obj);

    }

所以在object类中equals方法只能用来比较地址是否一样,与==作用一样。但当我们可以自己重写equals方法,使之满足我们的需求。

比如我们定义一个Person类,只有id和name都一样时,才确定他们是同一个人。代码示例:

package com.vedio.highobject;

public class Person {

    String name;

    String id;

    public boolean equals(Person p) {

        return this.name.equals(p.name)&&this.id.equals(p.id);

    }

}

package com.vedio.highobject;

public class Demo1 {

    public static void main(String[] args) {

      Person p1=new Person();

      Person p2=new Person();

      Person p3=new Person();

      p1.name="小明";

      p1.id="123";

      p2.name="小红";

      p2.id="123";

      p3.name="小明";

      p3.id="123";

      System.out.println(p1.equals(p2));

      System.out.println(p1.equals(p3));

      System.out.println(p2.equals(p3));

    }

}

可以观察到,只有id和name完全一样是,才为true。通过重写equals方法,满足了我们的需求。

equals与==的区别

String可以使用equals比较地址是因为它重写了equals方法 查看String对equals方法的重写源码,如下:

public boolean equals(Object anObject) {

        if (this == anObject) {

            return true;

        }

        if (anObject instanceof String) {

            String anotherString = (String)anObject;

            int n = value.length;

            if (n == anotherString.value.length) {

                char v1[] = value;

                char v2[] = anotherString.value;

                int i = 0;

                while (n-- != 0) {

                    if (v1[i] != v2[i])

                        return false;

                    i++;

                }

                return true;

            }

        }

        return false;

    }

equals是判断两个变量或者实例指向同一个内存空间的值是不是相同,而==是判断两个变量或者实例是不是指向同一个内存空间, 举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个 代码示例:

package com.vedio.highobject;

public class Demo2 {

    public static void main(String[] args) {

        String s1=new String("123");

        String s2=new String("123");

        System.out.println(s1.equals(s2));

        System.out.println(s1==s2);

        String s3="123";

        String s4="123";

        System.out.println(s3.equals(s4));

        System.out.println(s3.equals(s1));

    }

}

toString()方法

package com.object.high;

//所有类的父类 --Object类

//在Java中,所有的类都直接或间接继承了java.lang.Object类

//由于所有的类都是Object类的子类,所以任何类都可以重写Object类中的方法

public class Hello {

    //重写toString()方法

    public String toString(){

        return "Say \""+getClass().getName()+"\" to Java";//getClass().getName()获取类的名称

    }

    public static void main(String[] args) {

        System.out.println(new Hello());//当打印某个类对象时,将自动调用重写的toString()方法

    }

}

最后

在这里为大家整理了各个知识点模块整理文档(微服务、数据库、mysql、jvm、Redis等都有)和更多大厂面试真题,有需要的朋友

可以加q群:799215493   备注:简书   免费领取~

相关文章

  • 掌握这些面向对象的核心技术,包你面试无忧!

    面向对象简介 面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,...

  • 面向对象的这些核心技术,你掌握后包你面试无忧

    面向对象简介 面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,...

  • Java8高级开发视频教程

    学过前面的课程Java入门和Java面向对象编程之后,相信你已经熟练的掌握了面向对象中的各种概念,是否会对这些知识...

  • 面向对象核心技术

    面向对象核心技术 面向对象编程有3大基本特性:封装、继承和多态。 (1)类的封装:封装是面向对象编程的核心思想。封...

  • 对象与类

    对象与类 Tags: Java核心技术卷I 面向对象程序设计概述 面向对象程序设计简单OOP。 类类是构造对象的模...

  • js高级

    学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...

  • 06-JavaScript高级

    学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...

  • JavaScript高级

    学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...

  • C#之面向对象基础篇

    面向对象编程:简称OOP 面试题:什么是面向对象? 答:封装,继承,多态即为面向对象 面相对象的方法: 面向对象的...

  • Java基础总结2-面向对象

    二、面向对象 1、面试对象思想: (1)概述:面向对象对相对于面向过程而言的,面向过程强调的是功能,面向对象强调的...

网友评论

      本文标题:掌握这些面向对象的核心技术,包你面试无忧!

      本文链接:https://www.haomeiwen.com/subject/ioehbktx.html