Java基础

Posted chengxiaodi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础相关的知识,希望对你有一定的参考价值。

静态方法调用非静态成员的非法性理解

静态方法在类没有实例化的时候就已经被分配内存真正存在的了;而非静态方法这时候在内存上是没有存在的,所以静态方法这时候调用非静态成员是根本调用不到的,称为非法。

Java中定义一个不做事且没有参数的构造方法的用处

java程序在执行子类的构造方法之前,如果没有用super()来调用父类的特定构造方法,则会默认调用父类没有参数的构造方法,这时候,父类只是定义了有参数的构造方法的话,就会报错,因为找不到没有参数的构造方法,解决方法就是在父类上定义一个不做事且没有参数的构造方法。

接口和抽象类的区别

(1)接口方法默认是public且不可实现,而抽象类可以有非抽象方法
(2)接口中除了static,final变量,不能有其他变量;而抽象类中不一定
(3)一个类可以实现多个接口,但只能实现一个抽象类;接口本身可以通过extends拓展多个接口
(4)接口方法默认修饰符public,抽象方法原本就是为了被重写,所以不能使用private
(5)从设计层面来看,抽象类是对类的抽象,是一种模板设计;接口是对行为的抽象。是一种行为的规范。

成员变量和局部变量区别

(1)成员变量属于类,可以被public,private,static修饰;而局部变量属于方法,不能被访问限制符及static修饰
(2)从内存的存储方式来看,若成员变量用static修饰,那么它就属于类级别的;不是的话,属于实例级别的;对象存在于堆内存,局部变量存在于栈内存
(3)从内存的生存上看,成员变量随变量的创建而存在;局部变量随方法的调用而消失
(4)成员变量若没有赋值,则会被默认赋上初始值;不过要是被final修饰的变量也要赋上特定的值;局部变量就不会自动赋值

构造方法

构造方法作用是完成对类对象的初始化,即使没有声明也会自动分配一个无参的构造方法;构造方法不能用void修饰,且是自动执行无需调用

静态方法和实例方法区别

(1)静态方法调用无需创建对象,使用"类名.方法名"即可
(2)静态方法只能访问静态成员,反则非法报错;实例方法可以访问所有成员

对象相等和指向它们的指引相等

(1)对象相等比较的是内存存放的内容是否相等;
(2)指向对象的指引相等比较的是在内存中的地址是否相等;

==与equals()区别

(1)==:比较的是不是同一对象(地址),是则true,否则为false;
(2)equals():比较的是不同对象的内容是否相等;

理解hashCode

作用:确定对象在哈希表上的索引位置;返回值是一个int型整数,哈希表是一个散列表呈现(key,value)类型,通过key找到对象value;举个例子:hashSet的实现就是借助hashCode和equals,通过比较对象是不是同一个对象进行排列

线程,进程和程序三者认识

(1)线程:比进程更小的执行单位,一个进程拥有若干条线程,同类的多条线程是共享同一块内存空间和同一组资源的,因此线程的资源利用率高于进程,可以将线程看作轻量级的进程
(2)程序:看成是静态代码,包括指令和数据的文件
(3)进程:一个程序执行一次的过程,是系统运行程序的基本单位。进程的运行都会伴随多个线程的执行过程;进程之间是独立的,而线程之间是相互联系沟通的。

线程的执行流程

new(新建)初始化->调用start()方法开始运行(获得系统资源之前属于ready(可运行状态);获取之后进入running(运行状态))->若线程执行wait()方法进入等待状态(进入此状态后需要其他线程通知才可以返回执行状态)->若线程调用sleep(long time),wait(long time),join(long time)方法,线程进入超时等待状态,时间一到就自己进入执行状态->线程使用同步方法时,在没有获取到锁的情况下,线程进入阻塞状态->执行完run()方法后线程进入终止状态。

final关键字

(1)final修饰变量:(数据类型变量)一旦初始化之后便不可更改;(引用类型变量)初始化之后便不可指向另外的对象
(2)final修饰的方法:把指定方法锁定,防止继承类修改它;
(3)final修饰的类:把指定的类锁定,防止其他类去继承它

以上是关于Java基础的主要内容,如果未能解决你的问题,请参考以下文章

java语法基础,具体内容

Java基础(十五):异常处理

java基础测试题

Java基础| Java概述与基础语法案例

夯实Java基础系列目录

一道java基础理论题