java知识总结——基本概念(一)

说明

本文仅仅为了博主面试时方便查阅与梳理相关知识,如果有错误与不到位的地方,欢迎大佬指点改正,谢谢!
阅读书籍:《java程序员面试笔试宝典》

一、java语言有哪些优点?

1、java为纯面向对象的语言。
2、平台无关性。“一次编译,到处运行”。
3、java提供了许多内置的类库,简化了程序设计工作,缩短了项目开发时间。
4、提供了对web应用开发的支持。
5、具有较好的安全性和健壮性。
6、去除了C++语言中难以理解、容易混淆的特性,使程序更加严谨、简洁。

二、java与c/c++有什么异同?

1、java为解释性语言,其运行过程为:程序源代码经过java编译器编译成字节码,然后由JVM解释执行。而c/c++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。因此,java的执行速度比c/c++慢,但是java能够跨平台执行,而c/c++不能。
2、java为纯面向对象语言,函数与变量等必须在类中实现,除基本类型外,所有类型都是类。此外,java语言中 不存在全局变量或全局函数,而c++兼具面向过程和面向对象的特点,可以定义全局变量和全局函数。

java八大基本类型:byte、short、int、long、float、double、char、boolean。

3、java中不存在指针。
4、java中不存在多重继承,但可以通过实现多个接口的方式来实现类似多重继承的目的。
5、java开发中不需要关心对象所占的内存空间何时会被释放。

三、public static void main(String[] args)方法

main方法是java程序的入口方法,JVM在运行程序时,会首先查找main()方法。main是JVM识别的特殊方法名,是程序的入口方法。
1、main()方法可用的其他定义方式。

static public void main(String[] args){
	/*main方法*/
}

2、也可以把main()方法定义为final。

public static final void main(String[] args){
	/*main方法*/
}

3、也可以用synchronized来修饰main()方法。

static public synchronized void main(String[] args){
	/*main方法*/
}

不管定义哪种方式,都必须保证main()方法的返回值为void,并有static和public关键字修饰。同时由于main()方法为程序的入口方法,因此不能用abstract修饰。
4、同一个.java文件中是否可以有多个main()方法?
每个类中都可以定义main()方法,但是只有与文件名相同的用public修饰的类中的main()方法才能作为整个程序的入口方法。
5、在main()方法执行前能否先执行别的代码?
能,静态代码块不管顺序如何,都会在main()方法之前执行。

四、java程序初始化的顺序

在实例化对象时,对象所在类的所有成员首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。
java程序的初识化一般遵循3个原则(优先级依次递减):
1、静态对象(变量)优先于非静态对象(变量)的初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初识化多次。
2、父类优先于子类进行初始化。
3、按照成员变量的定义顺序进行初始化。
执行顺序流程图:

父类静态变量+静态代码块
子类静态变量+静态代码块
父类非静态变量+非静态代码块+构造函数
子类非静态变量+非静态代码块+构造函数

五、java中的作用域

在java语言中,作用域是由花括号的位置决定的,它决定了其定义的变量名的可见性与生命周期。
在java语言中,变量的类型有3中:成员变量、静态变量和局部变量。
1、成员变量:类的成员变量作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的声明周期才结束。
成员变量有4种作用域:

作用域与可见性当前类同一package子类其他package
public
protected×
default××
private×××

1)public
表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问。
2)protected
表明该成员变量或方法对该类自身,与它在同一个包中的其他类,在其它包中的该类的子类都可见。
3)default
表明该成员变量或方法只有自己和与位于同一包内的类可见。
若父类与子类位于同一个包内,则子类对父类的default成员变量或方法都有访问权限;
若父类与子类位于不同的package内,则没有访问权限。
4)private
表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外其他类和对象都没有权限访问。
注意:
·这些修饰符只能修饰成员变量,不能用来修饰局部变量。
·private和protected可以用来修饰内部类,但不能用来修饰外部类(只有public、abstract或final能用来修饰外部类)
2、静态变量:被static修饰的成员变量被称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有的实例所共享,即只要有一个类被加载,JVM就会给类的静态变量分配内存空间。因此可以通过类名和变量名来访问静态变量
3、局部变量:作用域与可见性为它所在的花括号内。

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

可以。一个java文件中最多只能有一个类被public修饰,并且这个类的类名与文件名必须相同,若这个文件中没有public的类,则文件名随便是一个类的名字即可。
注意:当用javac指令编译这个.java文件时,它会给文件中的每一个类生成一个对应的.class文件。

七、什么是构造函数

构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。构造函数具有以下特点:
1、构造函数必须与类的名字相同,并且不能有返回值(也不能有void);
2、每个类可以有多个构造函数。在没有显式添加构造函数的情况下,编译器在把源代码编译成字节码的过程中会提供一个没有参数默认的构造函数,但该构造函数不会执行任何代码。
3、构造函数可以有0个以上的参数;
4、构造函数总是伴随着new操作一起调用,且不能由程序的编写者直接调用,必须由系统调用。

构造函数与普通方法的区别:构造函数在对象实例化时会被自动调用,且只运行一次;而普通方法是在执行到它时被调用,而且可以被该对象调用多次。

5、构造函数的主要作用是完成对象的初识化工作。
6、构造函数不能被继承,因此它不能被覆盖,但是构造函数能够被重载,可以使用不同的参数个数或参数类型来定义多个构造函数。
7、子类可以通过super关键字显式地调用父类的构造函数,当有父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。

当父类没有提供无参数的构造函数时,子类的构造函数中必须显式地调用父类的构造函数。`
如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显式地调用父类的构造函数,因为编译器会默认调用父类提供的无参数的构造函数。

8、当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参构造函数,给子类也生成一个默认的无参构造函数。此外,默认构造器的修饰符只与当前类的修饰符有关(如果类被定义为public,则构造函数也为public)。
普通方法可以与构造函数有相同的方法名!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值