java基础知识面试题之基本概念

本文详细介绍了Java语言的基本概念,包括其平台无关性、内置类库、面向对象特性及与C/C++的异同。讲解了Java程序的入口main方法、初始化顺序、作用域、构造函数、接口、克隆方法、反射机制以及包的作用。同时,阐述了Java中实现类似C函数指针功能的方式,以及如何在main方法前打印HelloWorld。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.基本概念

1.1 java语言有什么优点

  • java语言是纯面向对象的语言,能够直接反应现实生活中的对象
  • java语言有平台无关性的特点,一次编译到处运行,不管在什么平台上编译的java代码都会形成java中间代码,中间代码有平台无关性的特点,由java虚拟机解释运行
  • java提供了很多内置类库
  • java提供了堆web应用开发的支持
  • java具有较好的安全性和健壮性,java提供了一个防止恶意代码攻击的安全机制(数组边界检查等),java的强类型机制,垃圾回收器,异常处理等机制使得在编写java代码时有很好的健壮性

1.2 java语言和c/c++有什么异同

  • 同:java和c++都是面向对象的语言,都有面向对象的思想(封装,继承,多态)
  • 不同:
    • java是解释性语言,java编译后形成中间代码,由jvm解释运行,c/c++是编译型语言,经过编译链接后形成可直接运行的二进制代码,所以java的运行速度比c/c++稍慢了些,但也因此有了跨平台性
    • java是纯面向对象的语言,除了基本数据类型外,所有的类型都是类,此外,java没有全局变量或全局函数,c++兼具面向对象和面向对象的特点,可以使用全局变量或全局函数
    • java没有指针的概念,使得程序更安全
    • java不允许多继承,但java可以实现多个接口,且接口也有多态性
    • java不需要管理内存,有垃圾回收机制

1.3 为什么需要public static void main (String[] args) 这个方法

  • jvm启动时,会去方法区找程序的入口main方法,若没找到就报错,由于main方法是第一个调用的方法,此时还没有任何对象,因此无法通过任何实例调用此方法,所以mian方法只能声明成public static的,void表示没有返回值,args表示可以传递参数,为开发人员在命令行状态下与程序交互的一种手段
  • 每个类中都可以定义main方法,但只用与本文件名相同的用public修饰的类中main方法才能作为程序的入口
  • public和static没有先后顺序,可以用final,synchronized修饰,但返回值类型必须是void

1.4 如何实现在main方法前打印helloworld

  • main方法是程序运行时第一个被运行的方法,但不是第一个执行的模块,由于静态代码块在类被加载时就回被调用,因此可以在静态代码块中编写代码,先于main方法执行

1.5 java程序初始化的顺序时怎样的

  • 原则:静态先于非静态、父类先于子类
  • 具体顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量,父类非静态代码块,父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数

1.6 java中的作用域有哪些

  • java语言中,变量的主要类型有三种:成员变量,静态变量,局部变量
  • 成员变量的声明周期和实例对象相同,可用四种权限修饰符修饰
    • public 所有类可见
    • private 当前类可见
    • protected 自己和子类可见
    • default 自己和当前包可见
  • 静态变量不依赖特定实例,所有实例共享,通过类名,变量名访问
  • 局部变量所在花括号内可见

1.7 一个java文件中是否可以定义多个类

  • 可以,但public类只能有一个,且类名需与文件名相同

1.8 什么是构造函数

  • 构造函数名必须跟类名相同,没有返回值(也不能是void)
  • 每个类可以有多个构造函数,没有定义构造器,系统默认提供一个空参的,若定义了构造器,系统不提供默认的
  • 构造函数总是伴随new调用,不允许直接调用,器实例化时自动调用,且只运行一次
  • 目的是完成对象的初始化工作
  • 构造函数不能继承,可以重载
  • 子类可以通过super关键字显示调用父类的构造器,若父类没有无参的构造器,子类需显示调用父类有参构造器,若父类有无参构造器,子类可以不显示调用,这是默认调用父类空参构造器
  • 默认构造器的修饰符跟当前类的修饰符相关

1.9 为什么java中的有些接口没有任何方法

  • 接口是常量和抽象方法的集合(常量默认用public static final修饰,方法默认用public abstract修饰)
  • 可以看成是一种特殊的抽象类
  • 一个类只能继承一个抽象类,但可以实现多个接口,在一定程度上解决了java只能单继承的缺陷
  • 接口中不定义任何方法可是作为一个类的标识

1.10 java中的clone方法有什么用

  • java中的传递机制是,基本数据类型传递的是值,引用数据类型传递的是地址值,在实际编程中有时会需要创建一个与A对象相同状态的对象B,在修改A的同时,B不能受到影响,这时要是还是使用=赋值操作就行不通了,可是使用clone方法返回一个跟对象A状态相同的一个新的对象
  • clone的使用方法
    • 实现Cloneable接口,标识自己是可克隆的对象
    • 在类中重写Object类中的clone方法
    • 在clong方法中调用super.clone
    • 把浅复制的引用指向新的克隆体
  • 浅复制 vs 深复制
    • 浅复制就是只对基本数据类型的成员变量进行复制
    • 深复制不止对基本数据类型的成岩变量进行复制,还对引用类型的变量进行复制,其中引用类型的变量也要调用clone方法

1.11 什么是反射机制

  • 允许程序在运行时进行自我检查,同时也允许对内部成员进行操作
  • 主要功能:获取一个对象的所属类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象方法
  • 获取class类的三种方式
    • class.forName(“类的路径”)
    • 类名.class
    • 实例.getClass()
  • java创建对象有几种方式
    • new
    • 反射
    • clone
    • 反序列化

1.12 package有什么作用

  • 提供多层命名空间,解决命名冲突,不同packeage下可以有同名的类
  • 对类的功能进行分类,可以使项目的组织结构更加清晰

1.13 如何实现类似c中函数指针的功能

  • 函数指针一个最重要的功能是实现回调函数(回调函数:指函数现在某处注册,需要的时候被调用)
  • java中要实现这个功能,可以定义一个接口,然后根据需要实现接口中的方法,然后将接口作为参数,由于接口也有多态的特性,需要调用什么类型的方法,就传相应的实现类进去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值