8个基本的数据类型

  • int

    • 32位
    • 4个字节
    • 正负20亿
    • 不能存手机号
  • long

    • 64位
    • 8个字节
  • float

    • 32位
    • 4个字节
    • 34.0f
  • double

    • 64位
    • 8个字节
  • short

    • 16位
    • 2个字节
  • byte

  • char

    • 16位
  • boolean

final 关键字

final: Final用于修饰类、成员变量和成员方法。
final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写(这里需要注意的是不能被重写,但是可以被重载,这里很多人会弄混),所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用);
Final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法;
Final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象当中的内容是允许改变的

摘要:

  • 一旦赋值不能被修改

  • 修饰类

    • 不能被继承
  • 修饰方法

    • 不能被重写,可以重载

      • 重载:一个类里面,方法名形同,参数列不同,叫重载。

      • 重写(覆写):子类对父类可访问方法的重新编写,方法名相同,参数列表一致,叫重写。

      • 方法覆写定义:

        与父类方法名称、参数类型及个数完全相同
        覆写方法不能拥有比父类更为严格的访问控制权限(public>default>private)
        若父类方法由private修饰,则此方法不能够方法覆写(private代表只能在本类中可见,则子类根本 不知道父类有这样一个方法,则不能覆写)

  • 位运算

  • 1.左移运算符

左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n 位,就相当于乘上2 的n 次方,例如下面的例子。

public class data17
{public static void main(String[] args){int a=2;int b=2;System.out.println("a 移位的结果是:"+(a<<b));}
}

运行结果
a 移位的结果是:8
分析上面的程序段:
首先从本质上来分析,2 的二进制是00000010,它向左移动2 位,就变成了00001000,即8。如果从另一个角度来分析,它向左移动2 位,其实就是乘上2 的2 次方,结果还是8。

2.无符号右移运算符

右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。

public class data18
{public static void main(String[] args){int a=16;int b=2;System.out.println("a 移位的结果是:"+(a>>>b));}
}

运行结果
a 移位的结果是:4
分析上面的程序段:从本质上来分析,16 的二进制是00010000,它向右移动2 位,就变成了00000100,即4。如果从另一个角度来分析,它向右移动2 位,其实就是除以2 的2 次方,结果还是4。

3.带符号的右移运算符

带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,先看下面一个简单的例子。

public class data19
{public static void main(String[] args){int a=16;int c=-16;int b=2;int d=2;System.out.println("a 的移位结果:"+(a>>b));System.out.println("c 的移位结果:"+(c>>d));}
}

运行结果
a 的移位结果:4
c 的移位结果:-4
分析上面的程序段:
a 的值是16,转换成二进制是00010000,让它右移两位成00000100 即4。
c 的值是-16,转换成二进制是11110000,让它右移两位成11111100 即-4。

tip:-16带符号右移2位的计算详情(掌握二进制十进制(正负数)的转换)
16的二进制00010000,反码11101111,反码+1得到补码11110000,带负符号右移,所以高位补1,得11111100.此为二进制的负数,减一求反码即可。11111100减一得11111011,反码00000100,即为4,带符号,结果为-4.

  • 注意 无符号右移 无论首位是0还是1 右移之后都会补0

  • 以及右移 要对32取模

  • 强制类型转换 下图 逆方向都要强制类型转换 而且 要加上强制类型转换的类型

  • int a=(int) 123L;

字符串

字符串如何保证不可变

  • char类型的数组 用final修饰
  • String 类 也是final修饰
    • 希望本类的所有特性(方法)不被子类修改
  • 没有提供修改字符串的方法

private final char value[];
字符串是一种不可变对象,指的是它的内容不可改变,但是引用是可以改变的,String类内部实现也是基于char[]来实现的,并且源码中String类是私有的并没有提供方法修改类内部的字符数组
形如+=这样的操作表面是修改了字符串,其实不是。
注意这里做了两次拼接,会产生两个临时的对象,程序结束后,这些临时对象就会被垃圾回收器回收。


== 和 equals 的区别是什么?

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。<–
String API

 String str = "abcdef";//charAt 返回第几个字符System.out.println("第几个字符:" + str.charAt(0));//codePointAt 返回a这个字符的码点是多少System.out.println("码点是:" + str.codePointAt(0));//offsetByCodePointsSystem.out.println("" + str.offsetByCodePoints(0, 1));//compareTo 返回0相同,返回正数 str在“abcde”之后,返回负数在“abcde”之前System.out.println("字典序比较:" + str.compareTo("abcde"));//startsWithSystem.out.println("是否以“”开头:" + str.startsWith("a"));//endsWithSystem.out.println("是否以“”结尾:" + str.endsWith("f"));//equalsIgnoreCase 忽略大小写System.out.println("忽略大小写:" + str.equalsIgnoreCase("ABCDEF"));//indexOfSystem.out.println("a相对与位置什么地方:" + str.indexOf("a"));System.out.println("f相对与位置什么地方:" + str.indexOf("f"));//indexOf 97->码点  从第几个开始,默认是从第0个开始System.out.println("a相对与位置1的什么地方:" + str.indexOf(97,1));//lastIndexOf  注意:lastIndexOf()方法虽然是从后往前搜索,但返回的位置是从前开始数的。System.out.println("a相对与位置1的什么地方(从后往前):" + str.lastIndexOf(97,1));//lastIndexOfSystem.out.println("a相对与位置什么地方:" + str.lastIndexOf("a"));System.out.println("f相对与位置什么地方:" + str.lastIndexOf("f"));//toUpperCaseSystem.out.println("变为大写:" + str.toUpperCase());//toUpperCaseSystem.out.println("变为小写:" + "ABCDE".toLowerCase());//substringSystem.out.println("从第一个位置切割:" + str.substring(1));//substring  3-1 = 2 不包括第三个位置 abcdefSystem.out.println("从第一个位置切割到第三个位置:" + str.substring(1,3));String str2 = " aaabbb ";System.out.println("去除空格:" + str2.trim());System.out.println("以逗号隔开:" + String.join(" ",str,"a","b","c"));List<String> list = new ArrayList<String>();list.add("s1");list.add("s3");list.add("s5");list.add("s7");System.out.println(String.join(",", list));

运行结果:

Java 的设计者认为共享带来的高效率远远胜过于提取、 拼接字符串所带来的低效率
1、StringBuilder 与 StringBuffer
StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
2、区别
StringBuffer 和 StringBuilder 区别在于,StringBuffer 是线程安全,StringBuilder 反之。
StringBuilder

StringBuffer
StringBuffer是线程安全的高效字符串操作类,在StringBuilder上加了锁机制
构造方法:

StringBuffer();

StringBuffer(String str)

StringBuffer(CharSequence seq)

StringBuffer(int capacity)
实例化时,初始化大小容量为16

append方法时,会有容量大小的判断。如果append添加字符长度大于初始化容量16,则按新算法计算容量大小,如果append的字符串长度超过16,则容量为34 (34=16 * 2 + 2)
要是append的字符串长度超过16,并且大于34,则直接为字符串需要的长度。
3.2 写法二
StringBuffer sb = new StringBuffer(“java”);
StringBuffer(CharSequence seq)

与写法一区别
实例化时,初始化大小容量为 (实例化参数字符串的长度+ 16),其它逻辑与写法一相同。

.3 写法三
StringBuffer sb = new StringBuffer(20);
与写法一区别
实例化时,初始化大小容量为 (自定义大小),其它逻辑与写法一相同。

复习:Java核心卷I面试基础笔记相关推荐

  1. Java核心卷Ⅱ(原书第10版)笔记(上)

    Java核心卷Ⅱ(原书第10版)笔记(上) 写在最前面,个人认为,卷Ⅱ更适合当手册使用,更多的是讲API的使用,前两章内容比较实际,要是合并到卷一就好了. 文章目录 第1章 Java SE 8 的流库 ...

  2. 看这里:Java核心卷第十版—— 包含一卷二卷(阿里云盘分享)

    Java核心卷内容简介 Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与<Java编程思想>齐名,10余年全球畅销不衰, ...

  3. java核心卷pdf及代码分享

    和大家分享一下自己整理的学习资料,希望对大家有所帮助,如果大家有好的学习资料也希望大家能分享给我,谢谢. java核心卷pdf java核心卷1pdf 链接:https://pan.baidu.com ...

  4. 输了腾讯赢了阿里:凭借27天超强度复习Java核心知识+面试神技,三面阿里斩获P6岗offer(飞猪事业部)

    写在前面 概括一下我二面腾讯的整个过程,那可叫一个起落落落起落落落落落-起 5月份时,就投了腾讯的后台开发,但迟迟没有收到面试邀请,终于在5月9号晚收到了腾讯的电话,遗憾的是那时在洗澡,并没有接到,错 ...

  5. Java核心卷I学习笔记(二)

    第4章 对象与类 1.面向对象程序设计的相关基础概念 A.面向对象的程序设计:简称OOP,是当今主流的程序设计范型,这种方式程序由对象组成的,每个对象包含针对用户公开的特定功能和隐藏的实现部分:在OO ...

  6. 《Java核心卷 I》第10版阅读笔记第八章(书第九章)

    文章目录 第八章 集合 8.1 Java 集合框架 8.1.1 将集合的接口与实现分离 8.1.2 Collection 接口 8.1.3 迭代器 8.1.4 泛型实用方法 8.1.5 集合框架中的接 ...

  7. Java核心技术 卷I:基础知识

    第一章 Java程序设计概述 太简单了,直接略过. 1.2 Java"白皮书"的关键术语 简单性:指相对于C++简单(指针.多重继承等),但设计者也并没有试图清楚C++中所有不适当 ...

  8. 超硬核,拒绝内卷全靠阿里大能整理的这份 Java 核心手册,堪称强无敌,谁来不说一声牛 AC

    2022 年注定是不寻常的一年,在今年因为疫情以及各大大厂纷纷传来裁员的消息,引得整个互联网圈动荡不堪.腾讯裁员 30%.京东.百度.字节等大厂都在纷纷裁员,引的这些中厂和小厂也跟风裁员. 这个时候外 ...

  9. Java核心技术(卷1) 10th 总结(兼与Java编程思想等对比)

    总结   前一段时间把<核心卷>的卷一看完了,后来又看完了<图解TCP/IP>,月初考了一个证券从业证书,还有实验室的事情,实在是很忙.眼瞅着到月底了,还是抽出时间做个总结.关 ...

最新文章

  1. •Grid报表和Free From报表产品之比较
  2. golang 排序list_Go语言使用sort包对任意类型元素的集合进行排序的方法
  3. python为什么这么火 知乎-没想到吧!Google 排名第一的编程语言,为什么会这么火?...
  4. Asp.Net第一章入门之后台处理程序
  5. 强大的Perl中的正则
  6. 前端开发注意事项(HTML与CSS进阶)
  7. 蓝色巨人IBM全力奔赴的混合云之旅能顺利吗?
  8. linux gcc编译下的文件读写操作
  9. mysql Innodb参数配置
  10. Android人脸识别开发入门--基于虹软免费SDK实现
  11. 项目移植过程中报:“Project facet Java version 1.7 is not supported.” 错误
  12. Window系统怎么如何激活?详细版
  13. 【layUI时间控件使用】:按钮显示时间并放到输入框
  14. 微信小程序生成海报库
  15. 金蝶移动bos开发教程_移动BOS开发 -- 移动表单
  16. 香农编码、哈夫曼编码、费诺编码的特点、优缺点及应用
  17. DailyTopic_4/16 B站:最有YouTube气质的视频网站
  18. java xml 大文件怎么打开_JAVA xml 流方式读取。数据挖掘大文件预处理。
  19. 466. 回文日期 Java题解 (模拟)
  20. quartus II 过期怎么办?

热门文章

  1. 用JAVA+jdbc+Mysql简单实现登陆注册
  2. springboot集成websocket(一)客户端、客户端断线重连、客户端连接验证
  3. Prometheus+Grafana+钉钉部署一个单机的MySQL监控告警系统
  4. matlab 模型参数估计值,基于MATLAB的AR模型参数估计
  5. 港科招生 | 香港科技大学(广州)2022年研究生自主招生简章
  6. request的用法
  7. c#调用野狗云 rest api
  8. 数据建模实战,Smartbi带你玩转购物篮分析
  9. P7072 [CSP-J2020] 直播获奖
  10. jsbridge实现及原理_JSBridge 介绍及实现原理