文章目录
一.基本概念
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中要实现这个功能,可以定义一个接口,然后根据需要实现接口中的方法,然后将接口作为参数,由于接口也有多态的特性,需要调用什么类型的方法,就传相应的实现类进去。