菜鸟进阶必杀技(Ⅰ)——java基础知识解析篇
开篇语:这篇文章是 java面试那件小事 系列文章的第一篇。该系列的文章将所有的读者都想象成是一个初学者,由浅入深的引入java相关的一些问题。这些问题都是sandeziVIP和朋友一起整理,或在群里或在论坛或查阅网络收集的一些出现频率较高且重要,当然也是必须要掌握的内容。如果你认为i你已经超出初学者了,却不是很懂每篇文章开头引入的几个问题,请把自己重归到初学者的行列。
java基础知识篇将涉及到 面向对象基本,操作符,控制执行流程以及初始化相关的内容。
问题:
- 面向对象的特征有哪些方面?
- Integer与int的区别?
- short num = 1;num = num+1;有什么错?short num =1 ; num +=1;有没有错?
- &和&&的区别?以及用最有效率的方法算出2乘以8等于几
- 静态变量和实例变量的区别
- equals()和==到底有什么区别?
- Overloaded和Override的区别。Overloaded的方法是否可以改变返回值的类型?
- fianl,finally,finalize的区别?
- 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
- 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
- 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
- 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。在jsp开发中,Integer的默认值为null,所以用el表达式在文本框中显示时,值为null;而int默认为0,所以在el表达式在文本框中显示时,结果为0,所以int不适合作为web层的表单数据的类型(具体见下表)。
基本类型 | 大 小 | 最小值 | 最大值 | 封装类型 |
boolean | — | — | — | Boolean |
char | 16bits(2字节) | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8bits(1字节) | -128 | 127 | Byte |
short | 16bits(2字节) | -2^15 | +2^15-1 | Short |
int | 32bits(4字节) | -2^31 | +2^31-1 | Integer |
long | 64bits(8字节) | -2^63 | +2^63-1 | Long |
float | 32bits(4字节) | IEEE754标准 | IEEE754 | Float |
double | 64bits(8字节) | IEEE754 | IEEE754 | Double |
- 所有数值类型都有正负号,所以不要去寻找无符号的数值类型
- boolean类型所占用存储空间的大小没有明确指定,仅定义为能够取字面值true或false
&&又叫做短路与,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于 if(!str=null&&!str.equals(""))表达式,当str为null时,后面的表达式不会执行,所以就不会出现NullPoninterException异常,如果将&&改为&,则会抛出空指针异常。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
2<<3应该是2*8的最有效率的运算方式。因为,将一个数左移n位,就相当于乘以了2的n次方,那么一个数乘以8只要将其左移3位即可。而位运算(<<)是cpu支持的,效率也就最高。
静态变量和实例变量的区别?
有static关键字修饰的变量叫做静态变量,因为其创建只是作为整个类而不是某个特定对象而存在,所以也叫做类变量。反之没有被static修饰的变量则叫做实例变量。
类变量和实例变量的区别:
- 一个static变量对每个类来说只有一份存储空;而非static变量(实例变量)则是对每个对象都有一个存储空间
- static变量即可以通过一个对象去定位它,也可以空过其类名直接引用;而对于非static变量则只能通过对象去引用
equals()和==到底有什么区别?
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
深入了解此题详见sandeziVIP早前的博文:从equals和==说起
Overloaded和Override的区别。Overloaded的方法是否可以改变返回值的类型?
overloaded表示重载,即在类中可以创建多个方法,它们具有相同的方法名,但具有不同的参数类型列表;Override表示重写,即子类中定义了与基类中具有相同名称和参数列表的方法,此时基类的中的该方法将被隐藏。
深入了解此题详见sandeziVIP的博文 :关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明
fianl,finally,finalize的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
PS:
本系列文章都遵循永久更新原则,发现新的东西都会及时加入,所以依旧希望大家积极讨论,不吝赐教。
另遇到问题较为繁琐且重要都会单独成文以说明之。
本系列文章更新列表入口:java面试那件小事
此文属http://blog.csdn.net/sandeziVIP搜集整理,任何形式的转载或引用请注明出处!