JAVA课程
IDEA的debug使用方法
- 取消多个断点
此处展示了所有的断点,可以一键取消
- debug查看方法调用
位运算
进制
程序中书写八进制(0开头)、十六进制(0x开头,x大小写皆可)、二进制(0B开头,b大小写皆可)
-
十进制转换为其他进制
就是初中学的求法
-
二进制转为其他进制
8421法,如果转变为十进制,将每一位的数值全部相加即可,如果是转变为八进制,每三位相加求和再拼接,如果转变为十六进制,每四位相加求和再拼接
原码反码补码
- 概念
- 原码:原本的数据值
- 反码:作为原码转补码的媒介(反码原码互相转换的过程中,符号位不变)
- 补码:计算机中存储的值
- 计算方式
- 正数的原反补一致
- 负数的 反码 根据 原码取反(0变1,1变0) 得到(符号位不变)
- 负数的 补码 根据 反码+1 得到
基本位运算符
- 位与& 运算:遇0则0
- 位或|运算:遇1则1
- 异或^运算:相同为false,相同为true
- 取反~运算:0变1,1变0
位移运算符
- 有符号左移<<:向左移动,符号位不变,右边补0(移动几位,乘二的几次幂)
- 有符号右移>>:向右移动,符号位补位(移动几位,除二的几次幂)
- 无符号右移>>>:移动之后,符号位补0
二维数组
定义方式
- 静态初始化
- int[][] arr
- int arr[][]
- int[] arr[]
- 动态初始化
- int[][] arr = new int[2][3] 动态初始化本质上是在堆内存中创建了一个长度为2的数组用来存储数组的地址和两个长度为3的数组用来记录数组,
存储方式
-
java二维数组在内存中地址不连续
-
内存地址格式分析
下图中@是分隔符,I表示存储的数据类型是int类型的,[表示是一维数组,[[表示存储的是二维数组,@后的数值是十六进制的内存地址
面向对象
类的定义
- 属性(成员变量):位于类中方法外的变量称为成员变量,成员变量有默认初始化值。区别于局部变量(方法中的变量)
- 行为(成员方法)
对象内存图
堆中对象存储了对象所属的类在方法区中的地址,所以调用方法时,是通过此地址找到对应的方法
private,this关键字
-
private
- 修饰成员变量和成员方法
- 被private修饰的成员只能在本类中访问(外部只能通过set和get方法修改数据)
-
this
- this可以调用本类的成员(变量,方法),解决成员变量和局部变量重名的问题
封装
- 定义:隐藏实现细节,仅对外暴露公共的访问方式
- 常见的体现:
- 私有的成员变量,只能通过get,set方法访问
- 将代码抽取成一个方法
- 将属性和行为抽取成一个类
- 好处:提高代码的安全性,复用性
API基础
API:Application Programming Interface应用程序编程接口
Java API指的是JDK中提供的各种功能的Java类
Scanner
-
nextInt() 接收整数
-
next(),nextLine() 接收字符串
- next()遇到空格不再继续接收数据
- nextLine()遇到回车不再继续接受数据
nextLine()和nextInt()配合使用,接收整数时,控制台接收到了"整数+回车换行符",将整数赋值给num的同时会将换行符也按顺序记录在内存中,scanner调用nextLine()下一次读取控制台输入的数值时,直接读取到了换行符于是没有接收数据直接运行到下一行
String
构造方法
-
public String()创建一个空白字符串对象
如果我们现在控制台打印字符串s,打印结果是空白(字符串的内容)而不是s的地址
-
public String(char[] chs)根据字符数组的内容创建字符串对象
-
public String(String original)根据传入的字符串内容来创建字符串对象
-
Stirng a = "abc"直接创建
创建字符串对象的区别对比
-
当使用双引号直接创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中,如果不存在会创建此字符串,存在直接复用
-
字符串常量池在jdk7开始从方法区挪到堆
-
-
当使用new方法创建字符串对象的时候,两个字符串对象中都存储了数组的地址并根据数组中的内容生成了字符串,虽然字符串内容相同,但是字符串对象的地址不同,所以s1 != s2
String面试题
-
第一题
字符串之间使用+拼接时,底层会自动创建一个StringBuilder对象,然后调用append方法完成拼接,再调用toString方法转换为String类型,本质是生成了一个String类型的对象,该对象存储在堆中,而不是字符串常量池中,所以本题结果是false
-
第二题
Java中存在常量优化机制,在编译的时候,会将"a"+"b"+"c"拼接为"abc",与上一题的区别在于上一题有对象参与运算
常用方法
-
equals()
-
equalsIgnoreCase()忽略大小写
-
charAt(int i)
-
toCharArray(String s)
-
substring(int beginIndex)从索引位置截取到末尾
-
substring(int buginIndex,int endIndex)左闭右开
-
replace(CharSequence target,CharSequence replacement)使用replacement替代target(CharSequence是String父类)
-
String[] split(String regex)根据传入的字符串作为规则进行切割,切割后的内容存入字符串数组中,并将字符串数组返回
split()方法可以使用单个字符、多个字符、空格进行切割,返回一个字符串数组
注意: . 、 $、 | 和 * 等转义字符,必须得加 \\。
StringBuilder
构造方法
-
public StringBuilder()创建一个空白可变字符串对象
-
public StringBuilder(String str)根据字符串的内容创建字符串对象
和String一样,打印StringBuilder类型的变量的结果是数据内容而不是地址值
常用方法
-
append(任意数据类型),返回一个字符串对象
因为返回的是对象本身,所以可以实现链式编程
-
reverse()翻转字符串
StringBuilder如何提高效率
如果代码中出现字符串变量和字符串进行拼接,首先会在堆中创建一个StringBuilder对象,然后StringBuilder对象调用toString()方法生成一个string对象,也就是说一次加法操作,一共在内存中创建了两个对象,既浪费空间也浪费时间
StringBuilder首先会在常量池中创建拼接的对象,然后将常量池中的数据拼接好之后存储在StringBuilder对象中,从始至终只有一个StringBuilder对象。可见stringbuilder是可以改变的,而string不可改变
集合
ArrayList
构造方法
-
ArrayList()构造一个初始容量为10的空列表
ArrayList list = new ArrayList();可以添加任意类型的对象ArrayList<String> list = new ArrayList<>();只能添加String类型数据
成员方法
集合的删除操作执行完之后会移动数组中的元素,确保没有空位
boolean add(E e)void add(int index,E element)将元素插入到指定位置boolean remove(Object o)删除指定元素(只删除集合中第一个o对象)E remove(int index)删除指定索引位置元素E set(int index,E element)E get(int index)int size()