Java基础知识—基础概念

基础概念

1.1 Java语言有哪些优点?

  1. java是纯面向对象的语言;
  2. 平台无关性;由于Java是解释型语言,编译器会把Java代码编译成字节码,然后再JVM中解释执行,可以跨平台执行,具备较好的移植性;
  3. Java提供了许多内置类库,简化了程序设计的操作,例如,Java语言对于多线程的支持,垃圾回收器等等;
  4. 提供了对于Web应用开发的支持;
  5. 具有较好的安全性和健壮性,例如:数组边界检测和Bytecode校验,此外java的强类型机制、垃圾回收器、异常处理和安全检查机制提供了良好的健壮性;
  6. 比C++更加严谨简洁;

1.2 Java和C/C++的异同点?

二者都采用了面向对象的思想(封装、继承、多态),二者都有很好的可用性;
不同点:

  1. Java是解释型语言,经过编译器翻译成字节码,由JVM解释执行;Java执行速度比C++慢,但是能够跨平台执行,C/C++不行;
  2. Java纯面向对象,所有代码必须在类中实现,基本数据类型除外;Java中不存在全局变量或全局函数;
  3. Java语言中没有指针概念;
  4. Java语言不支持多继承,通过实现多个接口,因为接口具有多态性,从而达到多继承的目的;
  5. Java语言中提供了垃圾回收器来实现垃圾的自动回收,java语言中没有析构函数,当垃圾回收器将要释放无用对象的内存时,会首先调用该对象的finalize()方法;
  6. Java具备平台无关性,每种数据类型都分配固定长度,不支持运算符重载,提供了对于内建稳定的内建支持;

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

public static void main(String[ ] args)是Java程序的入口方法,首先要查找main()方法;
public 是权限修饰符,static是静态方法,返回值为void

  • public和static没有先后顺序
  • main方法可以定义为final;
  • 可以用synchronized来修饰main方法;
  • 每个类中都可以定义main()方法,但是只有与文件名相同的用public修饰的类中的main()方法才能作为整个程序的入口方法;

1.4如何实现在main()方法执行前输出"Hello World!"

Java语言中,静态块在类被加载的时候就会被调用,因此可以在main()方法执行前,利用静态块实现输出"Hello World"功能

public class Test{
	static{
		System.out.println("Hello World1");
	}
	public static void main(String[ ] args){
		System.out.println("Hello World2");
	}
}

1.5 Java程序初始化顺序

Java中实例化对象时,要初始化类中的成员变量,遵循三个原则(优先级递减):

  • 静态对象优先于非静态对象(可以初始化多次)
  • 父类优先于子类进行初始化;
  • 按照成员变量定义顺序进行初始化;

1.6 Java中的作用域

Java中,作用域是有花括号的位置决定,决定了定义变量的可见性和生命周期;

  • 成员变量:类被实例化时,成员变量就会在内存中分配空间并进行初始化;
  • 静态变量(staic修饰):被所有实例共享,只要被一个类加载,JVM就会给类的静态变量分配存储空间;
  • 局部变量:作用域和可见性为它所在的花括号中;
    作用域对比
    当超类的实例方法或类方法是private时,是不能被子类调用的;

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

一个Java文件中可以定义多个类,但是最多只有一个类被public修饰,并且这个类名和
文件名必须相同;采用javac编译.java文件的时候,会给每个类生成一个对应的.classs文件;

1.8构造函数

构造函数是用来在对象实例化时初始化对象的成员变量,在Java语言中,构造函数具有以下特点:

  • 构造函数与类名相同,不能有返回值,也不能为void;
  • 每个类可以有多个构造函数;
  • 构造函数可以有0个、1个或者1个以上的参数;
  • 构造函数总是伴随着new操作一起调用,不能由程序编写者直接调用;
  • 主要作用是完成对象初始化;
  • 子类可以通过super关键字来显式调用父类的构造函数;
  • 当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数,给子类也生成一个默认的无参数的构造函数;

1.9为什么Java中有些接口没有任何方法?

接口是为了克服Java单继承的缺点,是抽象方法定义的集合,接口中成员作用域的修饰符都是public,常量默认使用是public static final修饰

Java中有些接口内部没有声明任何方法,这类接口被称为标识接口,例如Cloneable和Serializable等,使用时经常使用instanceof来判断对象的类型是否实现了一个给定的标识接口。

1.10 Java中clone方法的作用

Object提供了一个clone方法,返回一个Object对象的复制,复制函数返回的是一个新的对象而不是一个引用,使用clone()方法的步骤:

  1. 实现clone的类首先需要继承Cloneable接口,Cloneable接口实际上是一个标识接口;
  2. 在类中重写Object类中的clone()方法;
  3. 在clone中调用super.clone(),无论clone的类继承结构是什么,super.clone()都会直接或间接调用java.lang.Object中的clone()方法;
  4. 把浅复制的引用指向原型对象的克隆体;

浅复制和深复制有什么区别?
在这里插入图片描述

浅复制(Shallow Clone):浅复制仅仅复制所考虑的对象,而不是复制它所引用的对象;

深复制(Deep Clone):深复制把复制对象所引用的对象都复制了一遍

1.11反射机制

允许程序在运行时进行自我检查,同时允许对内部成员进行操作;
主要功能: 得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法;

如何获取一个class类?

  • class.forName;
  • 类名.class
  • 实例.getClass();

Java创建对象的方式?

  • 通过new语句实例化一个对象;
  • 通过反射机制创建对象;
  • 通过clone()方法创建一个对象;
  • 通过反序列化的方式创建一个对象;

1.12 package有什么作用

package类似于Linux文件系统,从根开始有目录,文件,在目录中嵌套目录;

作用:

  • 提供多层命名空间,解决命名冲突;
  • 按功能进行分配,使项目的组织更加清晰;

1.13 如何实现类似于C语言中函数指针的功能?

Java中没有指针的概念,利用接口和类来实现。先定义一个接口,在接口中声明要调用的方法,接着实现这个接口,最后把这个实现类的一个对象作为参数传递给调用程序,调用程序通过这个参数来调用指定的函数,从而实现回调函数的功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值