文章目录
- 前言
- 一、基础
- 二、java面向对象
- 2.1 面向对象与面向过程的区别
- 2.2 构造器Constroctor是否可被override(重写)?
- 2.3 在Java中定义一个不做事且没有参数的构造方法的作用
- 2.4 成员变量与局部变量的区别有哪些?
- 2.5 创建一个对象用什么运算符?对象实体与对象引用有何不同?
- 2.6一个类的构造方法的作用是什么?若没有声明构造方法,该程序能正确执行吗?为什么?
- 2.7 构造方法有哪些特性?
- 2.8 在调用子类构造方法之前会调用父类无参构造方法,其目的是?
- 2.9 对象的相等与指向他们的引用相等,二者有什么不同?
- 2..10 面向对象三大特征
- 2.11 在一个静态方法内调用一个非静态的成员为什么是非法的?
- 2.12 静态方法和实例化方法有何不同?
- 2.13 接口和抽象类的区别是什么?
前言
java基础:
一、基础
1.1 java和C++的区别?
答:(1)都是面向对象编程语言,都支持封装,继承和多态
(2)java不提供指针直接访问内存,程序内存更加安全
(3)Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口 可以多继承。
(4)Java有自动内存管理机制,不需要程序员手动释放无用内存
(5)在C语言中,字符串或字符数组最后都会有一个额外的字符“\0”来表示结束。但是,java语言中没有结束符这一概念。
1.2 自动装箱与拆箱
- 装箱:将基本类型用应用类型包装起来。
- 拆箱:将包装类型转换成基本类型
1.3 为什么java中只有值传递?
- 按值调用表示方法接收的是调用者提供的值
- 按引用调用表示方法接收的是调用者提供的变量地址
- 一个方法可以修改传递的引用所对应的变量值,而不能修改传递值调用所对应的变量值。
- Java程序设计语言总是采用按值调用。方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量内容。
1.4 重载与重写的区别
- 重载:方法名相同,参数类型或个数不同,返回值和访问修饰符可以不同
- 重写:就是当子类继承父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法
1.5深拷贝VS浅拷贝
- 浅拷贝:对于基本数据类型进行下值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝
- 深拷贝:对于基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝
二、java面向对象
2.1 面向对象与面向过程的区别
- 面向过程:面向过程性能比面向对象的高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,一般采用面向过程开发。但是,面向过程没有面向对象以维护、易复用、易扩展。
- 面向对象“容易维护、易复用、易扩展。但是,面向对象性能比面向过程低。
- 面向过程也需要分配内存,计算内存偏移量,java性能差的主要原因并不是因为它是面向对象语言。而是java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制码。
- 而面向过程语言大多都是直接编译成机械码在电脑上执行,并且其他它一些面向过程的脚本语言性能也并不一定比java好。
2.2 构造器Constroctor是否可被override(重写)?
- 不能重写(override)。但能重载(overload)所以一个类可以有多个构造函数
2.3 在Java中定义一个不做事且没有参数的构造方法的作用
- java程序在执行子类的构造方法前,如果没有super()来调用父类特定的构造方法,则会调用父类中"没有参数的构造方法"。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中有没有用super()来调用父类特定的构造方法,则编译时将会发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法就是在父类加上一个不做事的无参构造方法。
2.4 成员变量与局部变量的区别有哪些?
- 从语法形式上看:成员变量属于类的,而局部变量时在方法中定义的变量或是方法的参数;成员变量可以被public、private、static、等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰。局部变量方法里,必须初始化,除了参数。
- 从变量在内存的生存时间上看:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
2.5 创建一个对象用什么运算符?对象实体与对象引用有何不同?
new运算符,new创建实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存里)。一个对象可以指向0个或1个对象;一个对象可以有n个引用指向它。
2.6一个类的构造方法的作用是什么?若没有声明构造方法,该程序能正确执行吗?为什么?
- 主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有构造方法也会有默认的无参构造方法。如果我们自己添了类的构造方法(无论是否有参),java就不会再添加默认的无参构造方法,这个时候不能直接new一个对象而不传递参数了,所以我们一直在不知不觉的使用构造方法,这也是为什么我们在创建对象的时候后面加一个括号(因为要调用无参构造方法)。如果我们重载了有参的构造方法,记住都要在无参的构造方法也写出来。
2.7 构造方法有哪些特性?
- 名字和类名相同。
- 没有返回值,也不能用void声明构造函数
- 生成类的对象是自动执行,无需调用。
2.8 在调用子类构造方法之前会调用父类无参构造方法,其目的是?
- 帮助子类做初始化工作。
2.9 对象的相等与指向他们的引用相等,二者有什么不同?
- 对象的相等,比的是内存中存放的内容是否相等。而引用相等,比较的是他们的指向的内存地址是否相等
2…10 面向对象三大特征
- 封装
- 封装是指把一个对象的状态信息隐藏在对象内部,不允许外部对象直接访问对象的内部消息。但是可以提供一些可以被外界访问的方法来操作属性。如果属性不想被外界访问,我们大可不必提供方法给外界方访问。
- 继承
- 不同类型的对象,相互之间经常有一定的共同点。同时,每一个对象还定义了额外的特性使得他们与众不同。
- 继承是使用已存在的类定义作为基础建立新的类的技术,新的类定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承,可以快速的创建新的类,可以提高 代码的复用,程序的可维护性, 节省大量创建新类时间,提高开发效率。
- 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- 多态
- 多态,顾名思义,表示一个对象具有多种状态。具体表现为父类的引用指向子类的实例
- 多态特点:
- 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
- 对象类型不可变,引用类型可变;
- 方法具有多态性,属性不具有多态性;
- 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定;
- 多态不能调用"只在子类存在但在父类不存在"的方法;
- 如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父类的方法,执行的是父类的方法。
2.11 在一个静态方法内调用一个非静态的成员为什么是非法的?
- 由于静态方法可以通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
2.12 静态方法和实例化方法有何不同?
- 在外部调用静态方法时,直接用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说静态方法可以不创建对象。
- 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例化成员变量和实例方法;实例方法则无此限制
2.13 接口和抽象类的区别是什么?
- 接口的方法必须是public修饰,所以默认是public修饰,方法在接口中是不能实现的是抽象方法,在抽象类中可以是抽象方法,也可以是具体的实现方法。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口
本文详细解答了Java与C++的区别、自动装箱与拆箱原理、值传递特性、重载与重写概念、深拷贝与浅拷贝的差异。深入探讨了Java面向对象的特点,包括构造器、成员变量与局部变量的区别、对象的相等与引用相等、以及面向对象的三大特征:封装、继承和多态。此外,还解析了静态方法与实例方法的不同,接口与抽象类的对比,以及在面试中常考的Java核心概念。
1139

被折叠的 条评论
为什么被折叠?



