zoukankan      html  css  js  c++  java
  • 面向对象

    1.类和对象的关系

    类是对象的抽象,而对象是类的具体实例。
    类是抽象的,不占用内存,而对象是具体的,占用存储空间。
    类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
    类和对象好比图纸和实物的关系,模具和铸件的关系。

    2.方法重载和方法重写(覆盖)的区别英文位置不同作用不同重载overload同一个类中在一个类里面为一种行为提供多种实现方式并提高可读性重写override子类和父类间父类方法无法满足子类的要求,子类通过方法重写满足要求修饰符返回值方法名参数抛出异常重载无关无关相同不同无关重写大于等于小于等于相同相同小于等于

    3.this和super关键字的作用

    this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;this可以调用成员变量,不能调用局部变量;this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省略,必须是构造方法的第一条语句。,而且在静态方法当中不允许出现this关键字。
    super代表对当前对象的直接父类对象的引用,super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员);super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。

    4.static关键字的作用

    static可以修饰变量、方法、代码块和内部类static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。
    可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。
    .static变量和非static变量的区别(都是成员变量,不是局部变量)
    1.在内存中份数不同不管有多少个对象,static变量只有1份。
    对于每个对象,实例变量都会有单独的一份static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量
    2.在内存中存放的位置不同静态变量存在方法区中,实例变量存在堆内存中*
    3.访问的方式不同实例变量:对象名.变量名stu1.name="小明明";静态变量:对象名.变量名
    静态变量:第一次使用类的时候,static方法也可以通过对象名.方法名和类名.方法名两种方式来访问static代码块。
    当类被第一次使用时(可能是调用static属性和方法,或者创建其对象)执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。
    static内部类:属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

    5.继承条件下构造方法的执行过程

    继承条件下构造方法的调用规则如下:情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
    情况2:如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
    情况3:如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

    6.==和equals的区别和联系

    ”是关系运算符,equals()是方法,同时他们的结果都返回布尔值;“”使用情况如下:a) 基本类型,比较的是值b) 引用类型,比较的是地址c) 不能比较没有父子关系的两个对象
    equals()方法使用如下:a) 系统类一般已经覆盖了equals(),比较的是内容。b) 用户自定义类如果没有覆盖equals(),将调用父类的equals (比如是Object), 而Object的equals的比较是地址(return (this == obj);)c) 用户自定义类需要覆盖父类的equals()
    注意:Object的==和equals比较的都是地址,作用相同

    7.不通过构造函数也能创建对象吗?

    Java创建对象的几种方式(重要):1、用new语句创建对象,这是最常见的创建对象的方法。2、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。3、调用对象的clone()方法。4、运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
    (1)和(2)都会明确的显式的调用构造函数;(3)是在内存上对已有对象的影印,所以不会调用构造函数;(4)是从文件中还原类的对象,也不会调用构造函数。

    8.匿名内部类可不可以继承或实现接口。

    匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现.1、由于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了父类去完成。2、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。3、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。4.在内存中分配空间的时间不同实例变量:创建对象的时候才分配了空间。

    9.同步代码块和同步方法有什么区别答:

    相同点:同步方法就是在方法前加关键字synchronized,然后被同步的方法一次只能有一个线程进入,其他线程等待。而同步代码块则是在方法内部使用大括号使得一个代码块得到同步。同步代码块会有一个同步的“目标”,使得同步块更加灵活一些(同步代码块可以通过“目标”决定需要锁定的对象)。一般情况下,如果此“目标”为this,同步方法和代码块没有太大的区别。区别:同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁。很明显,同步方法锁的范围比较大,而同步代码块范围要小点。一般同步的范围越大,性能就越差。所以一般需要加锁进行同步的时候,范围越小越好,这样性能更好。

    10.静态内部类和内部类有什么区别

    :静态内部类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。非静态内部类能够访问外部类的静态和非静态成员。静态内部类不能访问外部类的非静态成员,只能访问外部类的静态成员。实例化方式不同:1) 静态内部类:不依赖于外部类的实例,直接实例化内部类对象2) 非静态内部类:通过外部类的对象实例生成内部类对象

    感谢那些夸奖和鼓励,那些不经意的惦记和突如其来的善意,热爱世间浪漫万物,沿途也为晚霞驻足,嘻嘻。
  • 相关阅读:
    复杂对象创建终结者(Builder Pattern)
    创建型模式特立独行的两位大侠
    工厂模式(Factory)
    MAC 相关
    iOS 地图相关
    iOS字体相关
    App跳转系统设置界面
    Mac 模拟慢速网络
    Thread1:EXC_BAD_ACCESS 错误
    iOS 统计App 的代码总行数
  • 原文地址:https://www.cnblogs.com/linanana/p/13658779.html
Copyright © 2011-2022 走看看