Java的基础语法,面试题
Java的基础语法
-
注释
-
介绍:平时我们写代码时,如果代码量较少,我们还可以看懂有印象。但是当项目结构一旦复杂起来,我们就需要用到注释了。
-
注释不会被执行,是给我们写代码的人看的。
-
种类
-
单行注释
//单行注释 public class xiwen { public static void main(String[] args) { //单行注释 System.out.println("强大自己,是解决问题的唯一办法!"); } } -
多行注释
//多行注释 /*中间是文字*/ public class Hello { public static void main(String[] args) { /* 1 1 1 1 1 1 */ String xiwen = "Hello, World"; System.out.println(xiwen); } }TIPS:单行注释只能注释一行文字,多行注释可以注释一段文本。
-
文档注释
//JavaDoc:文档注释 /** */ /** * NIHA * A * B * C * */主要学习单行和多行注释,文档注释一般大公司才会用到。
BAT B:百度 A:阿里 T:腾讯有趣的代码注释,可以陶冶情操。
![]()
-
-
书写注释是一个非常好的习惯! 请务必坚持下去!
-
标识符
- 关键字
- 常见关键字
![]()
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
-
标识符注意点
-
所有的标识符都应以字母(A-Z或者a-z),美元符(¥)、,或者下划线(_)开始
-
首字符之后可以是字母(A-Z或者a-z),美元符(¥)、,或者下划线(_)或狮子的任何字符组合
-
不能使用关键字作为变量名或方法名
-
标识符是大小写敏感的
-
合法标识符距举例:age、$salary、_value、__1_value
-
非法标识符距离:12bc、-age、#bca
可以使用中文命名,但是一般不建议这样去使用,也不建议去使用拼音,太Low
public class demo1 { public static void main(String[] args) { String 英雄联盟 = "荣耀黄金"; System.out.println(英雄联盟); //大小写十分敏感 String Ahello = "xiwen"; String ahello = "xiwen"; //String 1hello = "xiwen"; //String 1Ahello = "xiwen"; //String #hello = "xiwen"; //String class = "xiwen"; -
-
数据类型
-
强类型语言
- 要求变量的使用严格符合规定,所有变量必须先定义后才能使用。
- java、.NET、C/C++
-
弱类型语言
- 相较于强类型语言的规定和要求较为宽松。
- vb,php,JavaScript
-
Java的数据类型分为两大类
- 基本数据类型(primitive type)
- 引用数据类型(reference type)
![]()
八大基本数据类型
public class demo2 { public static void main(String[] args) { //八大基本数据类型 //整数 int num1 = 10;//最常用 byte num2 = 20; short num3 = 30; long num4 = 30L;//long类型要在数字后面加个l //浮点数:小数 float num5 = 50.1f;//float类型要在数字后面加个f double num6 = 3.1415926d; //字符类型 char name = 'a'; //字符串,String不是关键字,是类 String namea = "希文"; //布尔值 boolean flag = false; System.out.println(num1); System.out.println(namea); System.out.println(num2); System.out.println(num3); System.out.println(num4); System.out.println(num5); System.out.println(num5); System.out.println(num6); } }数据类型扩展及面试题讲解
public class demo3 { public static void main(String[] args) { String Xiwen = "范希文"; System.out.println(Xiwen); System.out.println("=========================="); //整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x int i = 10; //十进制 int i2 = 010; //八进制0 int i3 = 0x10; //十六进制0x 0-9 A-F 15 int i4 = 0b111000; System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println(i4); System.out.println("=========================="); //浮点数扩展? 银行业务怎么表示?钱 //BigDecimal 数学工具类 //========================== //float 有限 离散 舍入误差 大约 接近但不等于 //double //最好完全避免使用浮点数进行比较!! //最好完全避免使用浮点数进行比较!! //最好完全避免使用浮点数进行比较!! float f = 0.1f; //0.1 double d = 1.0/10; //0.1 System.out.println(f==d); //false float d1 = 223232323223f; float d2 = d1+1; System.out.println(d1==d2); //true System.out.println("=========================="); //字符拓展 char c1 = 'a'; char c2 = '文'; System.out.println(c1); System.out.println((int)c1); //强制执行 System.out.println(c2); System.out.println((int)c2); //强制执行 //所有的字符本质还是数字 //编码 Unicode→2字节 表:(97=a 65=A) 最多可表示65536个字符 Excel 也是65536 // U000 到 UFFFF System.out.println("=========================="); char c3 = '\u0061'; System.out.println(c3); //a System.out.println("=========================="); char c4 = '\u8303'; char c5 = '\u5E0C'; char c6 = '\u6587'; System.out.println(c4); //范 System.out.println(c5); //希 System.out.println(c6); //文 System.out.println("=========================="); String str = "\u8303\u5E0C\u6587"; System.out.println(str); //范希文 System.out.println("=========================="); //转义字符 /* \n:换行符 \t:水平制表符(Tab) //补充 \":双引号 \':单引号 \\:反斜杠 */ System.out.println("Hello\'World"); System.out.println("=========================="); //思考题 String sa = new String("hello world"); String sb = new String("hello world"); System.out.println(sa==sb); String sc = "hello world"; String sd = "hello world"; System.out.println(sc==sd); //开始解答这个思考题。解答这个思考题之前,我们需要了解清楚两个概念。 //当我们创建字符串对象时,有两种方式: //1.使用 new 关键字显式地创建一个新的字符串对象。例如:String sa = new String("hello world"); //2.使用字符串字面量直接赋值给字符串变量。 例如:String sc = "hello world"; /*这两种方式在内存中的处理方式是不同的。 对于使用 new 关键字创建的字符串对象,它们会被放在堆内存中的不同的内存地址上,即使内容相同也是如此。 因此,即使两个使用 new 关键字创建的字符串对象的内容相同,它们的引用地址也会不同。 所以,sa 和 sb 的引用地址是不同的。 */ /*对于使用字符串字面量直接赋值的方式,Java会将字符串字面量放入字符串常量池中。 当你创建一个新的字符串对象时,Java会首先检查字符串常量池中是否已经存在相同内容的字符串对象。 如果存在,就直接返回字符串常量池中的对象的引用,而不会创建新的对象。 因此,对于相同内容的字符串字面量,它们会在字符串常量池中共享同一个对象。所以,sc 和 sd 的引用地址是相同的。 */ //那么如何解决这个问题呢? //因此,当你使用 == 运算符来比较字符串引用时,它比较的是两个字符串引用的地址。 //如果你想比较字符串的内容是否相同,应该使用 equals() 方法来进行比较。 // 即为: /* String sa = new String("hello world"); String sb = new String("hello world"); System.out.println(sa.equals(sb)); */ 结果就是true,成功了! //后面会学到 // tips:对象,从内存分析 //布尔值扩展 boolean flag = true; if (flag==true){}//新手 if (flag){}//老手,效果是一样的 //Less is More! 代码要精简易读! //从此感觉Java并不简单。知识点如此简单,以上面试题是如此烧脑。 } }这个思考题需要单独拉出来说说,必须理解了,才能真正学到东西。
思考题
1.String sa = new String("hello world"); String sb = new String("hello world"); System.out.println(sa==sb); 2.String sc = "hello world"; String sd = "hello world"; System.out.println(sc==sd);1的输出结果为:false,2的输出结果为true。
开始分析
-
理论铺垫:当我们创建字符串对象时,有两种方式:
-
使用 new 关键字显式地创建一个新的字符串对象。例如:String sa = new String("hello world");
-
使用字符串字面量直接赋值给字符串变量。 例如:String sc = "hello world";
String sa = new String("hello world"); String sc = "hello world";
-
-
底层逻辑:这两种方式在内存中的处理方式是不同的
-
对于使用 new 关键字创建的字符串对象,它们会被放在堆内存中的不同的内存地址上,即使内容相同也是如此。
因此,即使两个使用 new 关键字创建的字符串对象的内容相同,它们的引用地址也会不同。 所以,sa 和 sb 的引用地址是不同的。 -
对于使用字符串字面量直接赋值的方式,Java会将字符串字面量放入字符串常量池中。当你创建一个新的字符串对象时,Java会首先检查字符串常量池中是否已经存在相同内容的字符串对象。如果存在,就直接返回字符串常量池中的对象的引用,而不会创建新的对象。因此,对于相同内容的字符串字面量,它们会在字符串常量池中共享同一个对象。 所以,sc 和 sd 的引用地址是相同的。
-
-
解决方案:当你使用 == 运算符来比较字符串引用时,它比较的是两个字符串引用的地址。
如果你想比较字符串的内容是否相同,应该使用 equals() 方法来进行比较。-
String sa = new String("hello world"); String sb = new String("hello world"); System.out.println(sa.equals(sb));
-
![]()
输出结果为True,成功了!
理解到这里,我感觉还是有点抽象费解。
我便想了一个例子,我感觉遇到抽象的不好理解的东西,具象化是一个很好的方法。
![]()
上面是两款iphone15,最新款的,哈哈。基本上一模一样吧。
接下来我来说一下我的思路和看法。
大体想法:
上面两款iphone15,它们两个相同吗?相同就是true,不同就是false。true还是false?可能有人说true,也有人说false。那么我感觉取决于你的判断标准。
第一种:
- 外观
- 参数
- 大小
- ......
那么很显然,结果就是它们两个是相同的。也就是true!
第二种:
- 序列号。
那就很显然易见了,苹果手机的序列号我感觉不亚于IP地址。那么结果就是它们两个是不同的。也就是false。
String sa = new String("hello world"); String sc = "hello world";判断iphone15是否相同的两种不同判断标准→创建字符串的两种方式
宇宙免责条例:只是我自己的见解,为了更好的理解。
补充知识
-
字节
-
位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
-
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。
-
1B(byte,字节)=8bit(位)
-
字符:是指计算机中使用的字母、数字、字和符号
-
-
转换
-
1bit表示一位
-
1Byte表示一个字节 1B=8b
-
1024B=1KB
-
1024KB=1M
-
1024M=1G
TIPS:一个英文字母为8位,即1个字节;一个汉字为16位,即2个字节。
-
简单区分一下32位和64位操作系统的区别
- 32位的cpu处理器,只能安装32位的电脑操作系统;
- 64位的cpu处理器,则可以安装32位和64位操作系统,所以64位处理器是向下兼容的;
- 但是,如果真的在64位处理器的电脑上面安装32位操作系统,那么会导致处理器的性能无法充分发挥。
-
- 关键字






浙公网安备 33010602011771号