8个基本的数据类型
- int
- 32位
- 4个字节
- 正负20亿
- 不能存手机号
- long
- 64位
- 8个字节
- float
- 32位
- 4个字节
- 34.0f
- double
- 64位
- 八个字节
- short
- 16位
- 两个字节
- byte
- char
- 16位
- boolean
final 关键字
- 修饰 变量 变成常量 要全大写
- 一旦赋值不能被修改
- 修饰类
- 不能被继承
- 修饰方法
- 不能被重写
- 重写 子类继承父类 重写父类方法
- 重载 一个类中 相同方法名 但是方法签名不同 参数列表不同
- 不能被重写
运算符
- 位运算
- 注意 无符号右移 :无论是正数还是负数,高位通通补0
- 以及右移 要对32取模:原因int为32位
- 强制类型转换 下图 逆向都要强制类型转换 而且 要加上强制类型转换的类型
- int a=(int) 123L;
- i++ 和++i的问题:
i++是这个i本身没有变化而后面会执行加1例如1++.打印出来为1
++i是对本身直接加一例如++1,打印出来直接为2
字符串
字符串如何保证不可变
- char类型的数组 用final修饰
- String 类 也是final修饰
- 希望本类的所有特性(方法)不被子类修改
- 没有提供修改字符串的方法
(所以string每次拼接都是新建一个char数组)
Java 的设计者认为共享带来的高效率远远胜过于提取、 拼接字符串所带来的低效率
StringBuilder:线程不安全(在append方法继承的AbstractStringBuilder的append方法,这个方法在第七行可能在两个线程都执行到第七行,而count是同一个值,而执行完后得到的也就是相同的,而导致数据不准确,而执行到第五行时线程1执行到第五行而cpu的时间片段用完之后线程2执行第五行之后,他的容量没有扩容会报一个ArrayIndexOutOfBoundsException异常)
StringBuffer:线程安全(同样是继承的AbstractStringBuilder的append方法,但是在stringBuffer里面加了一个锁)
输入和输出
输入使用
Scanner write = new Scanner(System.in);
write.nextInt()
这种写法
如何输入
输出使用system.out.printh这种
字符串的api
```java
String str = "abcdef";
//charAt 返回第几个字符
System.out.println("第几个字符:" + str.charAt(0));
//codePointAt 返回a这个字符的码点是多少
System.out.println("码点是:" + str.codePointAt(0));
//offsetByCodePoints
System.out.println("" + str.offsetByCodePoints(0, 1));
//compareTo 返回0相同,返回正数 str在“abcde”之后,返回负数在“abcde”之前
System.out.println("字典序比较:" + str.compareTo("abcde"));
//startsWith
System.out.println("是否以“”开头:" + str.startsWith("a"));
//endsWith
System.out.println("是否以“”结尾:" + str.endsWith("f"));
//equalsIgnoreCase 忽略大小写
System.out.println("忽略大小写:" + str.equalsIgnoreCase("ABCDEF"));
//indexOf
System.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));
//lastIndexOf
System.out.println("a相对与位置什么地方:" + str.lastIndexOf("a"));
System.out.println("f相对与位置什么地方:" + str.lastIndexOf("f"));
//toUpperCase
System.out.println("变为大写:" + str.toUpperCase());
//toUpperCase
System.out.println("变为小写:" + "ABCDE".toLowerCase());
//substring
System.out.println("从第一个位置切割:" + str.substring(1));
//substring 3-1 = 2 不包括第三个位置 abcdef
System.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));
对象和类
静态域
类加载顺序
1.首先加载父类的静态字段或者静态语句块
2.子类的静态字段或静态语句块
3.父类普通变量以及语句块
4.父类构造方法被加载
5.子类变量或者语句块被加载
6.子类构造方法被加载
构造器的特点
- 和类名一样
- 可以有0个一个或者多个参数
- 通过new调用
- 如果我们不给他构造函数 java会自动给他一个默认的无参构造函数
- 如果 我们有显示的给定构造函数那么以我们给定的为准 java不再给定默认的构造函数
封装的优点
- 可以减少耦合
- 提高数据的安全性