java基础及面试题(1.0)
目录
1.0知识点到循环为止,其他知识点看1.0后面的博客
一、java特点:
1)、Java是跨平台的 •
Java程序的跨平台主要是指字节码文件可以在任何具有Java虚 拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释 器负责将字节码文件解释成为特定的机器码进行运行。
2)、Java是安全的 •
Java取消指针。指针容易造成内存分配前/释放后引用指针、数组越界问题。
Java提供了自动内存管理机制,由垃圾回收器在后台自动回收,
Java在字节码的传输过程中使用了公开**加密机制(PKC)。
而在运行环境提供了四级安全性保障机制: 字节码校验器 -类装载器 -运行时内存布局 -文件访问限制
3)、完全面向对象的
4)、Java是健壮的
• Java的强制类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。
• 对指针的丢弃是Java的明智选择。
• Java的安全检查机制使得Java更具健壮性。
二、java跨平台原理:
1)Java跨平台和C跨平台的区别:
------Java:一次编译,到处运行
------C:多次编译,到处运行
• 在互联网情况下,平台各异,Java的跨平台更具有优势
• Java可以跨所有平台吗:要看有没有提供并安装相应的虚拟机
• Java的运行速度没有C语言快
• Java需要将class文件解释成机器码再执行;C执行执行机器码
2)jdk、jre、jvm
• JDK: • Java Development Kit • 针对Java开发员的产品
• JRE: • Java Runtime Environment • 是运行Java程序所必须的环境集合
• JVM • Java Virtual Machine • 解释运行Java字节码文件,跨平台的核心
• 联系:JDK 包含JRE,JRE包含JVM。
(解释器是jdk或jre目录下bin目录中的java.exe文件,而javac.exe是编译器。)
3)一个程序创建到运行
(1)创建java文件a.java并保存:class A{}-----------(2)编译源代码:javac a.java(编译完生成class文件)-----(3)运行java A(运行A类)(运行期间是jvm中的解释器将class解释为对应平台可运行编码)
-----反编译:即将.class文件反编译为源代码(可用一些反编译软件)
三、数据类型和运算符(这里的知识的需要注意下)
注意:默认的数据类型是什么?整型有那几个?数据类型的运算及转换? !!!!!!!
命名规则
• 必须以字母、_下划线、美元符$开头。
• 其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合
• 大小写敏感,长度无限制。
• 不可以是Java的关键字。
• 注意 • Java不采用通常语言使用的ASCII字符集 • Java采用unicode这样的标准的国际字符集。因此,这里的字母的含 义: 英文、汉字等等。(不建议大家使用汉字来定义标识符! 国际通用字符集 2个字节)
(注意变量有默认的数据类型,各个数据类型转换有向上/向下转型)
基本数据类型之间的转换(注意重点)(要注意基本类型的默认值:int、double,还要各个基本类型的精度)
此时提几个问题?
为什么float会大于long?
long到float不用强转,因为float表示的范围确实比long表示的范围大,虽然它只占4个字节,而long占8个字节,float是用科学记数法来表示数据的,long是用二进制表示的。所以两者单纯用字节长度来比较他们表示数据范围是没有可比性的。
那如果是包装类这些转换怎么转?
四、流程控制语句(待续)
1)ifelse语句: if(){} else if(){} else{}
2)switch(重点)(关于default不同位置+有无break+case值是否匹配多种情况)(推荐的语句写法)
一、这里的switch中有多种情况
1、default的位置(default在最前、中间、最后)
2、default/case代码有无break(有break、无break)
3、case值是否匹配(有匹配、无匹配)
此时则要对switch的知识非常了解才能对于各种可能的重排出现的情况都明白
总结switch方法:
1、default不是switch的出口,switch的出口是整个代码块执行完/遇到break。
2、default和case的谁优先执行分两种(一种是case有匹配、一种是case无匹配)
1)有case值匹配时(则以匹配的case为switch入口),此时执行该case及下面的case/default语句直到遇到break/代码执行完(即找到switch出口)
2)没有case值匹配时,此时以default为swutch的入口,并执行default及以下case的代码直至遇到switch出口
3、如看不懂其中一种情况举例:以default的位置为例
(1)default在switch开头:若所有case都不满足条件,则执行default,并执行default语句之后的case语句,直到break或结束。
(2)default在switch中间:若所有case都不满足条件,同上,直接执行default语句,并执行default语句之后的case语句,直到break或结束。
(3)default在switch末尾若所有case语句都不满足条件,则执行default语句,结束;若有case满足,则执行case语句直到遇到break或switch语句结束。
例
int i = 8;
switch (i){
case 0: System.out.println("0");
case 1: System.out.println("1"); break;
default: System.out.println("default");
case 2: System.out.println("2"); break;
case 3: System.out.println("3");
case 4: System.out.println("4"); break;}
结果: Default 2
推荐写法:一般每个case后都要加break,default一般用来写关闭一些资源的操作等。
二、case后的值可以是什么值?
在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。
在Java7后,也支持了String类型,String byte short int char Enum 类型
switch的case也可以为能够隐式自动转换为int类型的(byte,short,char,包装类,enum,string都可以隐形的转换为int) ,实际上String类型有一个hashCode算法,结果也是int类型.而byte short char类型可以在不损失精度的情况下向上转型成int类型.对四个包装类的支持是因为java编译器在底层手动进行拆箱,自动转换为基本类型再进行隐形转换而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值.
(1.7之后所增加的String、四个包装类(byte,short,char,int 的包装类)的支持是因为这些都支持隐式的转换为整型。)
3)while :while(){}
4)do while: do{}while()
和while区别??
do while不管什么条件,先执行一遍代码,再去看while中的条件是否符合,符合再去执行一遍,一直循环。
5)for
foreach、迭代器、for等的区别??哪个效率高??底层实现一样??
上面的各个循环语句哪个效率高点、各个的应用场景??
这里在容器等查询哪里有一些说明,并且由于篇幅较长,以后会写关于java迭代的文章。
6)return 、continue 、break、多重循环
上面是关于0-循环迭代相关的基础知识题。
下面是刷面试题提及的一些关于0到循环的知识点。