java面向对象

  1. 面向对象和面向过程的区别?

面向过程:事务比较简单,可以用线性思维解决

面向对象:事务比较复杂,简单的线性思维无法解决

  1. 类和对象的概念以及关系?

类是对对象的抽象(抽象:抽出相似的部分),对象是具体的事务

先有具体的对象,然后抽象各个对象之间象(相似)的部分,归纳出,通过类再认识其他具体对象。

个体和群体的关系

  1. 内存的分配图(栈、堆),栈和堆分别存放什么数据?

栈中存放的是局部变量数据

堆中存放的是成员变量数据

  1. 局部变量和成员变量的区别?

位置不同:

局部变量定义在方法中(包括形式参数)

成员变量定义在类中,方法外。

作用范围不同:

     局部变量的作用范围是当前方法 

成员变量的作用范围最小当前类 

如果成员变量和局部变量同名,局部变量优先级别高(就近原则)

初始值不同:

局部变量没有初始值

成员变量有初始值(由自身类型决定)

在内存中位置不同: 

局部变量在 栈内存

成员变量在 堆内存

局部变量和成员变量同名,在方法中局部变量优先级别高。如何表示成员变量,通过对象名.变量名,或者 通过this关键字.(同名,表达方式不同)

  1. 局部变量和成员变量如果重名,如何解决?

使用this解决

  1. 方法的重载的特点?
  1. 必须是两个以上同名的方法。(类和方法名相同)
  2. 方法之间的参数组合必须不同(参数的数目不同或者参数的类型不同以及顺序不同)

  1. 构造方法的特点及作用?

特点:方法名和类名相同,不需要返回值类型

作用:一般是做初始化操作,比如给 成员变量赋值

构造方法是一个有参数方法

  1. this关键字有什么作用?

 this是一个引用变量,指向当前对象本身

  1. static变量和非static变量的区别?

都是成员变量,不是局部变量

1、在内存中份数不同

不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份。

static成员变量是属于整个类的,也称为  类变量

 而非静态成员变量是属于 对象的,也称为 实例变量

2、在内存中存放的位置不同

     静态变量存在  方法区  

      实例变量存在  堆内存  

3、访问的方式不同

     实例变量: 对象名.变量名  stu1.name="小明明";

     静态变量:对象名.变量名  stu1.school="西二旗小学"; 不推荐如此使用

                      类名.变量名  Student.school="东三旗小学"; 推荐使用

4、在内存中分配空间的 时间不同

     实例变量:创建对象的时候才分配了空间  new 类名

     静态变量:第一次使用类的时候   方法区

     Student.schoolName="东三旗小学";

     或者Student stu1 = new Student("小明","",20,98);

  1. static代码块与代码块的特点?

静态代码,在虚拟机加载类的时候就会加载执行,而且只执行一次;

非静态代码,在创建对象的时候(即new 一个对象的时候)执行,每次创建对象都会执行一次。

  1. 继承的优点

提高的代码的复用性

  1. 方法重写的特点

在父类方法不满足子类的需求时,方法重写解决了这个问题

方法名、参数必须相同

  1. static修饰属性、方法分别有什么特点?

static修饰属性:属性随着类的加载而加载,是类变量,其加载早于对象,不需要new即可加载,类变量所在的类的所有对象共用这一个属性,存放在静态域中

static修饰方法:方法随着类的加载而加载随着类的加载而加载,是类方法,其加载早于对象,不需要new,类方法所在的类的所有对象共用这一个方法. 类方法内部只可调用静态的属性和静态的方法,而不能调用非静态的属性和方法
反之,非静态方法可以调用静态的属性和方法

  1. 代码块与静态代码块的区别?

静态代码块:在虚拟机加载类的时候会加载执行,并且只执行一次

代码块:在创建对象的时候执行,并且每创建一个对象就会执行一次

  1. super

关键字的作用及使用总结

作用:执行当前对象的父类对象,每个对象都有一个super属性,创建对象时分配空间

使用:修饰父类的成员变量   super.color

      修饰父类的成员方法   super.introduce(); 不要求是第一条语句

      修饰父类的构造方法   super(color,age);   必须是第一条语句

  1. 方法的重写的特点

在父类方法不满足子类的需求时,使用方法重写解决

  1. == 与 equals的区别?

==是比较栈内存中的值

对于基本数据类型是比较栈内存中的值,但是对于引用数据类型,栈内存中的值就是地址

equeals是比较对象在堆内存中成员变量的内容

  1. 什么是封装?为什么需要封装?封装的作用和含义?

1、封装是隐藏某些功能,对外只暴露部分功能

2、隐藏对象内部的复杂性,对外只提供简单的接口

3、便于外界调用,从而提高系统的扩展性、安全性和可维护性

  1. 权限修饰符有哪些?有什么区别?

private  私有的,只能被当前类本身访问

默认的  默认的,被同一个包中的类访问

protected  受保护的,可以被同一个包中的其他所有类以及不同包中的子类访问

public   公共的,可以被整个工程中的所有类访问

  1. 继承与组合的区别

继承是子类继承父类的一些方法,使子类具有父类相同的行为,通过extends实现继承,继承强调的是is-a关系,继承具有提高代码复用性的功能

组合是通过对现有对象进行拼接组合而成的具有更复杂功能的对象,组合体现的是整体和部分的关系,强调has-a关系

20、如何对类进行封装?

在定义一个类时,通过关键字private修饰类的属性,将类中的属性私有化。私有化的属性只能在类中被访问,外界想要访问私有化的属性,只能通过属性提供的方法

21、方法的重载和重写的比较

方法的重载必须在同一个类中,方法名相同,类名相同,但是参数类型不能相同

方法的重写不在同一个类中,方法名和参数类型必须相同

22、类的哪些成员是可以被子类继承的?

父类的构造方法不能被子类继承

原因:构造方法名必须与类名相同

但是子类类名不可能与父类相同

父类的private不能被子类继承

因为private只能在本类中访问

如果在同一个包,子类可以继承父类的默认修饰的成员

成员使用public、protected可以被子类继承

  1. 开闭原则(百度)

软件中的对象(类、模块、函数等)应该对于扩展是“开放”的,但是对于修改是“封闭”的。通俗点讲就是软件系统中包含的各种组件应该在不修改现有代码的基础上引入新功能。

“开”是对于组件功能的扩展是开放的,是允许对其进行功能扩展的;

“闭”是对于原有代码的修改是封闭的,即不应该修改原有代码。

  1. 子类能够从父类中继承哪些财产?

子类可以继承父类除构造方法和用private修饰的成员外所有的成员

  1. 多态的条件?

继承、重写、将子类对象赋给父类引用变量、父类的引用变量调用子类重写的方法

  1. 多态的优点?

1、使用父类作为方法的形参,提高功能扩展性

  1. instanceof 是什么?有什么作用?

是一个保留关键字,作用是定义一个接口

  1. 向上转型和向下转型及注意点?

向上转型是小转大,自动转

向下转型是大转小,需要强转(有风险,可能数据会溢出)

29、final是什么?有什么作用?

Final是最终的,不变的

修饰变量:把变量变成常量,变量的值就不能再改变

修饰方法:方法不能被子类重写

修饰类:不能再被子类继承

30、请列举Java的23种设计模式(百度  只要名字即可)

简单工厂模式

  1. 什么是抽象类?抽象类有什么特点及作用?

用abstract修饰,

抽象的类不能被创建,只能被继承

必须有构造方法,创建子类时需要

抽象类可以有0/1或者多个抽象方法

抽象类为所有子类提供了一个通用模板,所有子类可以在此模板上进行扩展

通过抽象类,可以避免子类的设计随意性

通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。

抽象类就是用来当父类的,用来被继承的。

    抽象类可以继承抽象类

    抽象类可以继承普通类吗?? 可以,但是很少这么做

32、接口是什么?有什么特点?有什么作用?

接口是一种规范,接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。

使用接口做方法的形参,实参可以是实现了该接口的所有类,可以达到多态的效果

33、抽象类和接口的联系与区别?

共同点:

都可以有抽象方法 也可以没有抽象方法

都不能new

都是用来被子类 继承 或者 实现的

区别1:

语法

 *  1.成员变量  接口只有常量,没有变量

 *  2.成员方法  接口中的方法全部是抽象方法,抽象类可以0个,1个或者多个抽象方法,并且允许存在非抽象的方法。

 *  3.构造方法  抽象类有构造方法,接口没有构造方法

 *  4.一个类只能继承一个抽象类,但是可以同时实现多个接口

 区别2:

语义(设计理念的区别 核心区别

 抽象类is-a  Bird is a Animal 中间产品  最终产品    模板  作为父类

 接  口has-a  Plane/Bird/SuperMan has an flyable ability  具有什么能力 遵守什么规范

34、内部类有什么特点?

1、内部类是类的成员,所有可以使用四个权限修饰符进行修饰

2、内部类方法可以直接调用外部类的成员变量和方法

3、外部类的方法中不能直接访问内部类的属性和方法,可以间接访问(创建内部类对象)

4、成员内部类不能定义静态成员,但是可以定义final静态成员属性。

内部类的作用

可以定义比private权限更小的作用范围

通过内部类可以实现多重继承

35、匿名内部类有什么特点?有什么作用?

匿名内部类不能有构造方法。

匿名内部类不能定义任何静态成员、方法和类。

匿名内部类不能是public,protected,private,static。

只能创建匿名内部类的一个实例。

一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

如果某些类只使用一次,那么久没必要专门定义一个类,此时使用匿名内部类就行了

减少代码量

36、内部比较器和外部比较器的特点及区别?

内部比较器:

1.适用于两个对象的大小
2.在一个类里面完成

外部比较器:

1.适用于多个对象的比较、排序
2层次清晰,简单易懂

  1. 垃圾回收机制的原理

解决内存的泄露,垃圾回收机制会定期(周期性)找出那些不再用到的内存(变量),然后释放其内存

垃圾回收机制只回收JVM堆内存中的对象空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值