Java面试复习ing


前言:考完研刚刚回过来神的我,意识到要找工作了。本人想找移动端的,所以要复习一遍Java。但是看视频什么的就没必要了,于是本博客采用《Java核心代码》 + 《Java语言程序设计》两本经典大书,已经自己的理解边看边写博客。--------------未完-----------------

第一章 Java的基础知识

关于Java很多同学对它的使用可能已经很熟悉了,但是作为面试,往往有很多的Java前置内容是被我们所忽略的。

TIPs:关于操作系统和计算机组成原理的内容在此不做过多的赘述。

Java编译过程

用高级语言编写的程序成为源程序。由于计算机不懂源程序,所以我们需要使用编译器将源程序翻译成机器语言的程序,机器语言程序与其他的支持库代码链接构成可执行文件,如在windows系统的.exe文件。

由于每台机器的机器语言不一样,我们源程序可以通过特定的编译器来移植到任何机器上,但是此时的源文件必须重新编译。而使用Java,可以只写一次程序,并将他编译成称为字节码的特殊机器语言码,也就是.class文件。这个.class文件可以在任何装有Java虚拟机也就是JVM的计算机上运行(JVM是用来解释Java字节码的)

解释和编译的不同处。 编译是把高级代码作为独立单元转化为目标语言的操作,解释则是非独立单元,只转换高级代码的各个步骤。在每一步转换后立即执行。

Java的术语

在进行学习之前,我们回去官网下载JDK,但是点进去一看,我的天JDK,JRE,SE。。。这些区别是什么呢?

1.JDK(Java Development Kit)这个工具包1.2~1.4版本被称为Java SDK(软件开发包,Software Development Kit)。

2.JRE是Java运行环境,它只包含Java虚拟机,不包含编译器(也就是不用编译,只运行),我们作为开发学习,这种环境肯定是不行的。

3.Java SE(Java Standard Edition)相较于 EE(Enterprise Edition)复杂,ME(Mico Edition)微型。SE是标准版的服务器应用的Java平台

4.API 应用程序接口,包括用于开发Java程序准备的类和接口。API是一直在扩展的,可在官网查看最新的Java API。

5.IDE 集成开发环境 IDEA和Eclipse就是

~~这里默认大家已经装好JDK~~

第二章 Java程序基本设计结构

我们先编写一个最简单的程序

public class part3 {
    public static void main(String[] args){
        System.out.println(111);
    }
}

我们来逐行分析,第一个关键字 public 称为访问修饰符 用于控制其他代码段对这段代码的访问等级,我们后面再介绍。

class为一个类,表明Java程序的全部内容都包含再类中。类相当于一个人,类中的方法相当于人的行为,一个人可以有多个动作,一个类也可以有多个方法。

class后面的 part3为类名,类名的命名需要以字母开头,后面跟字母和数字的任意组合,但是不能为Java的保留字(public class 这些在编译器中会高亮的词 “由于Java区分大小写 所以Public可以用,但是不建议”) 一个java文件只能由一个公共类,此时的类名需与文件名保证一致。

有两个公共类就会报错。

若整段代码没有什么语法错误,编译之后就会生成和执行的.class文件,再运行.class文件就可以得出输出 “111”。

TIPS:根据Java语言规范,main方法必须声明为public,这个在官方文档中有说明。之前有程序员报出过main方法在不是public修饰下也可以运行,官方给出的回答是:可能会有未知错误,并在 Java SE 1.4以后强制了此要求

至于 static void 是指main方法是一个静态的没有返回值的方法,main不对任何对象进行操作,事实上,在启动程序时还没有任何一个对象,静态的main方法将执行并创建对象。

接下来的内容在别的编程语言也有类似的地方,不会过多赘述

基本数据类型

1.整型

类型存储大小取值范围
int4字节-2 147 483 648 ~ 2 147 483 647(2e9)
short2字节-32 738 ~ 32 767
long8字节-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte1字节-128 ~ 127

一般使用的为int型,在Java中整型的范围与运行Java代码的机器无关,与c,c++不同这两种语言需要针对不同的处理器来选择高效的范围,在32位机上的代码在16位机器上可能会溢出。

2.浮点
floatdouble,前者4字节,后者8字节。一般使用的是双精度浮点也就是double。
下面介绍一下浮点溢出的情况:
1.正无穷大 Double.Positive_INFINITY
2.负无穷大 Double.NEGATIVE_INFINITY
3.NaN(不是一个数字) 0/0或者负数的平方根
在这里插入图片描述
在这里插入图片描述
由于0/0会直接抛异常,所以无法展示效果。

Tips: 由于浮点的精度误差会出现一下情况:
在这里插入图片描述
在这里插入图片描述
出现这样的原因主要是浮点数值采用二进制表示,在二进制中无法精确的表示 1 10 \frac{1}{10} 101,就像我们日常使用的十进制无法很好的表示 1 3 \frac{1}{3} 31 一样,如果我们在编程时不允许有舍入误差,应该使用BigDecimal这个类。
在这里插入图片描述
在这里插入图片描述
相信打过ACM的小伙伴应该会比较熟悉这个类,这就是Java的大数类,它是将数字作为字符串输入(仔细看number1和number2加上了'' ''),用它同样可以处理超长的整型与浮点。

3.char型
理解char型,首先得了解什么是Unicode编码机制。char型原本用于表示单个字符,但是随着发展有些Unicode可以用单个的char来表示,而有的需要两个char来表示,例如汉字,日文,韩文等。在如今的Java中,采用的是16位的Unicode字符集,也就是UTF-16。

Unicode编码规则是U+xxxx 这里的x是一位16进制的数(0~F)四位二进制,四个四位二进制也就是16位二进制。编码范围为U+0000 ~ U+FFFF。在Java中一个char型描述了UTF-16的一个代码单元。因此建议 最好不要使用char型来处理字符,除非是要处理UTF-16中的代码单元,我们可以统一用字符串处理,这样做是为了防止在特殊情况下将UTF-16的一个代码单元与整个UFT-16字符集混淆。

4.Boolean型
有true与false两种值,需要注意的是,在c和c++中,布尔值可以与整型互换,而在Java中是不可以的。
在这里插入图片描述
在这里插入图片描述
有的编译器则不会提示,一定要注意!!!!

命名规则

一个良好的命名习惯,可以增加程序的可读性,为开发工作减少大量的时间。
我们主要的要注意的是变量,常量,类,方法的命名。

1.变量与方法:使用小写,若包含几个单词,则首字母小写,后续单词的首字母大写。如:showInputDiagonal,radius,studentsNumber

2.类名的每个单词首字母大写,如:ComputerAear,JOptionPanel

3.常量的所有字母全部大小,多个单词用下划线隔开。 如:MAX_NUMBER。

命名时最好不要缩写,提高可读性。(反正有自动补全嘛,又不费事 )

如何空格 分块

有的同学的写的代码就是因为分块与空格打不好,导致代码完全看不下去。
分块的方法主要有两种,尾行与次行。
在这里插入图片描述
这是尾行 大括号在上一行的尾部开始

在这里插入图片描述

这是次行 在下一行开始大括号

空格的注意:

int a=3*(9+6)*5; //是不是很拥挤
int a = 3 * (9 + 6) * 5;

在运算符两边用空格隔开,看起来就会舒服很多!

字符串

关于条件语句,循环语句,变量,常量,运算符没有太多需要注意的地方,大体上与别的语言一致。下面说一下String类型。

Java种截取子串的方法是substring
在这里插入图片描述

在这里插入图片描述
substring方法的第一个参数为起始位置(从0开始),第二个参数是终止位置的后一个位置,这样得到串的长度就很简单:3 - 0 = 3。

Java中拼接串就是用‘+’即可。
在这里插入图片描述
在这里插入图片描述
当字符串与非字符串进行拼接的时候,Java会自动将非字符串转换为字符串再进行拼接。
在这里插入图片描述
在这里插入图片描述
最重要的一点
Java的String类它是不支持修改,也就是String类中没有修改字符串的方法,不能对该类中某一段或者某一个字符进行修改,这是它的工作方式决定的。

Java对String类的操作简单来说,我们可以理解为有一个公共存储池,字符串变量指向存储池中某个位置,若复制字符串,则新串与原始串共享相同字符内容。倘若我们对老串或者新串进行修改,则又会将一个新的String加入到共享池中。

有一种特殊情况,例如键盘输入,或者是很多较小的字符串组成的串,共享池中就会有很多串,浪费时间与空间,使用StringBuilder类就可以避免这种情况。

StringBuilder builder = new StringBuilderr();
        builder.append("ch");
        builder.append("string");
        String a = builder.toString();
        System.out.println(a);
chstring

Tips:StringBuilder的前生是StringBuffer,StringBuffer相较于前者效率稍低,但是允许多线程操作字符串,在单线程中我们应该选择StringBuilder。

字符串的比较: Java中字符串的比较可以直接调用方法来比较,不可以使用 ‘= =’ 。‘==’是判断字符串在共享池中位置的。可以这么说,若是用‘ = = ’判断的字符串相等,那么字符串一定相等,但是用‘ = = ’判断的不想等字符串也有可能相等的!(类似于C中的指针,指向的位置)

        String str = "Hello";
        String str2 = "123456Hello123";
        str2 = str2.substring(6,11);
        System.out.println(str);
        System.out.println(str2);
        if(str == str2) System.out.println(1);
        else System.out.println(0);
Hello
Hello
0

很明显,str和str2都是“Hello”,但是用‘ == ’判断出来的并不相等。

关于String类的API可以去查查官网,绝大多是的方法都是很经常用的。

---------------------------------------------------------------未完-------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值