第一章 Java语言
1.Java基础
1.1 为什么Java代码可以实现一次编写、到处运行?1.2 一个Java文件里可以有多个类吗(不含内部类)?1.3 说一说你对Java访问权限的了解1.4介绍一下Java的数据类型1.5 int类型的数据范围是多少?1.6 请介绍全局变量和局部变量的区别1.7 请介绍一下实例变量的默认值1.8为啥要有包装类?1.9 说一说自动装箱、自动拆箱的应用场景1.10 如何对Integer和Double类型判断相等?1.11 int和Integer有什么区别,二者在做==运算时会得到什么结果?1.12 说一说你对面向对象的理解
第一章 Java语言 1.Java基础 1.1 为什么Java代码可以实现一次编写、到处运行?因为有JVM,这是是Java跨平台的关键。
在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class)。
在程序运行时,JVM将字节码翻译成特定平台下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。
注意事项
- 编译的结果是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行;跨平台的是Java程序、而不是JVM,JVM是C/C++开发的软件,不同平台下需要安装不同版本的JVM。
- 一个java文件里可以有多个类,但最多只能有一个被public修饰的类;如果这个java文件中包含public修饰的类,则这个类的名称必须和java文件名一致。
提供了三种访问修饰符,即private、protected、public,在使用这些修饰符修饰目标时,一共可以形成四种访问权限,即private、defalut、protected、public,注意在不加任何修饰符时为default访问权限。
不加权限修饰符,其访问能力与default修饰符相同。竖着记忆:我自己,我邻居,我儿子,陌生人。
在修饰类时,该类只有两种访问权限,对应的访问权限的含义如下:
①defalut:该类可以被同一包下其他的类访问。
②public:该类可以被任意包下,任意的类所访问。
Java数据类型包括:基本数据类型,引用数据类型两大类。
①基本数据类型有8个,可以分为4个小类,分别是整数类型(byte/short/int/long)、浮点类型
(float/double)、字符类型(char)、布尔类型(boolean)。
其中,4个整数类型中,int类型最为常用。2个浮点类型中,double最为常用。
另外,在这8个基本类型当中,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。
②引用类型就是对一个对象的引用,根据引用对象类型的不同,可以将引用类型分为3类,即数组、类、接口类型。
引用类型本质上就是通过指针,指向堆中对象所持有的内存空间,只是Java语言不再沿用指针这个说法而已。
③扩展阅读
对于基本数据类型,你需要了解每种类型所占据的内存空间,面试官可能会追问这类问题:
对于引用数据类型,需要了解JVM的内存分布情况,知道引用以及引用对象存放的位置,详见JVM部
分的题目。
int类型占4字节(32位),数据范围是 -2^31 ~ 2^31-1 。
1.6 请介绍全局变量和局部变量的区别注意事项:Java中没有真正的全局变量,面试官应该是出于其他语言的习惯说全局变量的,他的本意应该是指成员变量。
1.7 请介绍一下实例变量的默认值实例变量若为引用数据类型,其默认值一律为null。
若为基本数据类型,其默认值如下:
byte:0
short:0
int:0
long:0L
float:0.0F
double:0.0
char:’u0000’
boolean:false
注意事项:上述默认值规则适用于所有的成员变量,所以对于类变量也是适用的。
1.8为啥要有包装类?Java语言是面向对象的语言,其设计理念是“一切皆对象”。但8种基本数据类型却出现了例外,它们不具
备对象的特性。正是为了解决这个问题,Java为每个基本数据类型都定义了一个对应的引用类型,这就
是包装类。
扩展阅读
Java之所以提供8种基本数据类型,主要是为了照顾程序员的传统习惯。这8种基本数据类型的确带来了
一定的方便性,但在某些时候也会受到一些制约。比如,所有的引用类型的变量都继承于Object类,都
可以当做Object类型的变量使用,但基本数据类型却不可以。如果某个方法需要Object类型的参数,但
实际传入的值却是数字的话,就需要做特殊的处理了。有了包装类,这种问题就可以得以简化。
自动装箱:可以把一个基本类型的数据直接赋值给对应的包装类型;
自动拆箱:可以把一个包装类型的对象直接赋值给对应的基本类型;
通过自动装箱、自动拆箱功能,可以大大简化基本类型变量和包装类对象之间的转换过程。比如,某个方法的参数类型为包装类型,调用时我们所持有的数据却是基本类型的值,则可以不做任何特殊的处理,直接将这个基本类型的值传入给方法即可。
1.10 如何对Integer和Double类型判断相等?Integer、Double不能直接进行比较,这包括:
1.不能用==进行直接比较,它们是不同的数据类型;
2.不能转为字符串进行比较,转为字符串后,浮点值带小数点,整数值不带,也不相等;
3.不能使用compareTo方法进行比较,该方法只能对相同类型进行比较。
整数、浮点类型的包装类,都继承于Number类型,而Number类型分别定义了将数字转换为byte、short、int、long、float、double的方法。所以,可以将Integer、Double先转为转换为相同的基本数据类型(如double),然后使用==进行比较。
示例代码
Integer i = 100; Double d = 100.00; System.out.println(i.doublevalue() == d.doublevalue());1.11 int和Integer有什么区别,二者在做==运算时会得到什么结果?
int是基本数据类型,Integer是int的包装类。二者在做==运算时,Integer会自动拆箱为int类型,然后再进行比较。如果两个int值相等则返回true,否则就返回false。
1.12 说一说你对面向对象的理解面向对象思想是一种更符合我们思考习惯的思想,并将我们从执行者变成了指挥者。面向对象是一种更优秀的程序设计方法,它的基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。它从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物为中心来思考,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的类,作为系统的基本构成单元,这使得软件系统的组件可以直接映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌。
扩展阅读
结构化程序设计方法主张按功能来分析系统需求,其主要原则可概括为自顶向下、逐步求精、模块化
等。结构化程序设计首先采用结构化分析方法对系统进行需求分析,然后使用结构化设计方法对系统进
行概要设计、详细设计,最后采用结构化编程方法来实现系统。
因为结构化程序设计方法主张按功能把软件系统逐步细分,因此这种方法也被称为面向功能的程序设计
方法;结构化程序设计的每个功能都负责对数据进行一次处理,每个功能都接受一些数据,处理完后输
出一些数据,这种处理方式也被称为面向数据流的处理方式。
结构化程序设计里最小的程序单元是函数,每个函数都负责完成一个功能,用以接收一些输入数据,函
数对这些输入数据进行处理,处理结束后输出一些数据。整个软件系统由一个个函数组成,其中作为程
序入口的函数被称为主函数,主函数依次调用其他普通函数,普通函数之间依次调用,从而完成整个软
件系统的功能。
每个函数都是具有输入、输出的子系统,函数的输入数据包括函数形参、全局变量和常量等,函数的输
出数据包括函数返回值以及传出参数等。结构化程序设计方式有如下两个局限性:
①设计不够直观,与人类习惯思维不一致。采用结构化程序分析、设计时,开发者需要将客观世界模
型分解成一个个功能,每个功能用以完成一定的数据处理。
②适应性差,可扩展性不强。由于结构化设计采用自顶向下的设计方式,所以当用户的需求发生改变,或需要修改现有的实现方式时,都需要自顶向下地修改模块结构,这种方式的维护成本相当高。



