浮点类型也可以采用科学计数法的方式:5.12e2 = 5.12 × 10 ^ 2。
字符类型
允许写这种方式:
char c1 = 97;
char c2 = ‘\t’;
java中char的本质就是一个整数,输出时输出的是它对应的编码。所以char类型是可以进行计算的。
字符类型存储到计算机的过程:
‘a’—>字符编码是97—>二进制是1100001—>存储
从计算机读取的过程:
二进制1100001—>字符编码97—>‘a’—>显示
布尔类型
boolean = true or false
布尔类型的值占用1个字节
3、字符集与字符编码(♥♥♥)
计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致’a’解析成’b’或者乱码。
- ASCII字符编码:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。
ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;但是7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。
-
Unicode字符编码:包含了非常多的字符,每个字符的编码都不同,所以不会有乱码问题。一个英文字母和汉字都占用2个字节,可能会存在冗余。
-
UTF-8字符编码:是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,现在使用最广泛。字母占1个字节,汉字占3个字节。
4、数据类型转换
自动类型转换
细节:
-
多种类型数据计算的时候,会把它们先转换成类型最大的那个
-
(byte、short)和char之间不会进行自动类型转换
-
byte、short、char类型之间可以进行计算,但先要转成int类型
-
自动提升原则:计算后,结果转成类型最大的那个
强制类型转换
将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成 精度降低或溢出,格外要注意。
细节:
-
强转符号只针对最近的操作数有效,所以一般会在后面数据操作加上括号
-
char类型可以保存int类型的值,但如果保存int类型的变量需要强转
数据类型和String类型转换
//基本类型转String
String s1 = 某基本数据类型的值 + “”;
//String转基本数据类型,调用基本数据类型包装类.parse方法即可,如下:
int i1 = Integer.parseInt(“123”);
//注意String类型不能用这种方式转char类型,因为字符串包含多个字符,可以使用charAt方法
char c1 = s1.charAt(index);
5、运算符
运算符分类
-
算术运算符
-
赋值运算符
-
关系运算符 [比较运算符]
-
逻辑运算符
-
位运算符 [需要二进制基础]
-
三元运算符
算数运算符
说明
除号/
,如果10/3结果是整型不是浮点型
对一个数据取模,比如a % b
,等同于a - a / b * b
或者可以这么认为,取模的符号和左边的数相互一致:
7 % 3 = 1;-7 % 3 = -1;7 % -3 = 1
经典习题
i = 10;
i = i++;
System.out.println(i);
赋值运算符
下面这些都是赋值运算符:
int a = 10;
a += 1;
a -= 1;
赋值运算符会进行类型转换:
byte a = 2;
a += 1;
//上面这个等价于 a = (byte)(a+1);
关系运算符
关系运算符的结果都是boolean类型,要么是true,要么是false。
逻辑运算符
逻辑与&
,逻辑或|
,逻辑异或^
。
短路与&&
,短路或 ||
,取反!
。
短路&&,只要第一个为false那后面不判断,短路或||,只要后面有一个为true后面不判断。
public static void main(String[] args) {
int x = 5;
int y = 5;
if (x++== 6 & ++y== 6){
}
System.out.println("x = " + x + " y = " + y);
}
//x = 6;y = 6
public static void main(String[] args) {
int x = 5;
int y = 5;
if (x++== 6 && ++y== 6){
}
System.out.println("x = " + x + " y = " + y);
}
//x = 6;y = 5
三元运算符
条件表达式 ? 表达式 1: 表达式 2;
为true执行表达式1,false执行表达式2。
public static void main(String[] args) {
int a = 10;
int b = 99;
int result = a > b ? a++ : b++;
System.out.println(“result=” + result);
System.out.println(“a=” + a);
System.out.println(“b=” + b);
}
题目:计算三个数中最大的那个
public static void main(String[] args) {
int num1 = 270;
int num2 = 25;
int num3 = 104;
int bigNum1 = num1 > num2 ? num1 :num2;
int max = bigNum1 > num3 ? bigNum1 : num3;
System.out.println(“最大的数是:” + max);
//或者
int max = (num1 > num2 ? num1 : num2) > num3 ? (num1 > num2 ? num1 : num2) : num3;
System.out.println(“最大的数是:” + max);
}
位运算符
算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移 <<: 符号位不变,低位补 0
逻辑右移 >>>:也叫无符号右移,运算规则是: 低位溢出,高位补 0
运算符的优先级
其中最需要注意的就是:逻辑与、逻辑或、逻辑非的优先级
逻辑非 > 逻辑与 > 逻辑或
//好好看这个例子
boolean s1 = true,s2 = true,s3 = false;
System.out.println(s1 || s2 && s3);//true
6、进制换算
常用的进制的符号:
-
十进制就是直接写即可
-
八进制要求以0开头,比如:015
-
十六进制:0x开头,比如:0x15
-
二进制:要求0b或0B开头,比如0b11011
其他细节:
-
其他进制转换成十进制,按照每一位进行计算,最后一位是进制的0次方,依次往前算
-
十进制转换成其他进制,拿这个数除以换算的进制,取余数并且反向输出即可
-
二进制转八进制,每3位一组去计算即可
-
二进制转十六进制,每4位一组去计算
-
八进制转二进制:八进制每一位都换成二进制的三位
-
十六进制转二进制:同上,变成一位变四位
第二章、程序控制结构
1、顺序控制
就是按照程序代码的顺序执行。
2、分支控制(if)
分为以下:
if单分支、if-else双分支、if-else if…-else多分支、嵌套分支。
题目:判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
(1)年份能被 4 整除,但不能被 100 整除;
(2)能被 400 整除
public static void main(String[] args) {
int year = 2100;
System.out.println(isRunNian(year) ? year + “是闰年” : year + “不是闰年”);
}
public static boolean isRunNian(int year){
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
return true;
}else{
return false;
}
}
题目:下面这个输出什么?
public static void main(String[] args) {
boolean b = true;
if (b == false){ //这里输出b,如果把 b==false 改成 b=false 输出c
System.out.println(“a”);
}else if (b){
System.out.println(“b”);
}else if (!b){
System.out.println(“c”);
}else{
System.out.println(“d”);
}
}
题目:参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组, 输入成绩和性别,进行判断和输出信息。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println(“请输出选手的成绩”);
double score = scanner.nextDouble();
if (score >= 8.0) {
System.out.println(“请输出选手的性别”);
char gender = scanner.next().charAt(0);
if (gender == ‘男’){
System.out.println(“进入男子组”);
}else if (gender == ‘女’){
System.out.println(“进入女子组”);
}else {
System.out.println(“性别输入有误”);
}
}else{
System.out.println(“你好,成绩不合格,你被淘汰了”);
}
}
3、分支控制(switch)
语法:
流程图如下:
如果case语句种没有break,那么就继续执行下一个case中的语句,这个叫做穿透。
switch(表达式),表达式的返回值必须是byte、short、int、char、enums,String类型。
switch和if语句的区别?
-
如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可以使用,建议使用 swtich 语句。
-
其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广。
4、循环控制(for)
语法:
细节:
-
for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。
-
循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
5、循环控制(while)
语法:
6、循环控制(dowhile)
语法:
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
先执行一次再判断,固定至少执行一次。
上面这些循环可以嵌套执行。
7、跳转控制(break、continue)
-
continue语句用于结束本次循环,继续执行下一次循环
-
continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面的标签的使用的规则一样.
-
break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环[for , while , do-while]中
第三章、数组
1、一维数组简介
数组是一种引用类型的数据结构,可以储存同一种类型的数据。
动态初始化数组:
//声明数组
int a[]; 或者 int[] a
//创建数组
a=new int[10];
静态初始化数组:
int[] a = {1,4,5,1,5,2,7};
细节
-
数组元素可以是引用类型,也可以是基本类型
-
创建的数组如果没赋值,是有默认值的
-
可能会报数组下标越界异常
练习:
-
创建一个 char 类型的 26 个元素的数组,分别 放置’A’-‘Z’。使用 for 循环访问所有元素并打印出来。提示:char 类型数据运算 ‘A’+2 -> ‘C’
-
请求出一个数组 int[]的最大值 {4,-1,9, 10,23},并得到对应的下标。
2、数组赋值机制和数组拷贝
数组在默认情况下是引用传递,赋的值是地址。
值传递/值拷贝 和 引用传递/引用拷贝的区别可以使用代码测试一下。
测试一下怎么让数组进行值拷贝。
3、数组反转
两种方式:
-
找规律反转
-
使用逆序赋值的方式
4、数组添加/扩容
练习1:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java
-
原始数组使用静态分配 int[] arr = {1,2,3}
-
增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}
-
用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-0YxKr9Zr-1711918098706)]
[外链图片转存中…(img-ySEsA255-1711918098706)]
[外链图片转存中…(img-Hl2aa5JC-1711918098707)]
[外链图片转存中…(img-5IKE2jGz-1711918098708)]
[外链图片转存中…(img-bteCDbP2-1711918098708)]
[外链图片转存中…(img-O27wce0D-1711918098709)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-8NaHleNL-1711918098709)]
最后
俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
[外链图片转存中…(img-EUz5lNJe-1711918098709)]
[外链图片转存中…(img-y0rFSPKQ-1711918098710)]
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!