一:变量与数据类型
- 基本数据类型
- byte:1字节/short:2字节/int:4字节/long:8字节/float:4字节/double:8字节/char:1字节/bollean:1字节(作为数组中的某个元素),4字节(作为单个变量存储数据)
- 存放在栈空间,栈空间特点:1. 存储效率高 2. 先进后出 3. 存储空间小,不能存放大量的数据
- java底层的byte和short按照32位(int类型)计算。
- 引用数据类型
- String
- 存放在堆空间: 存取效率最低;存放的位置随机;存储空间大,能存放大容量的数据。
- 自定义数据类型
变量用来操作内存中的数据。 字面量:java的变量和常量中存放的具体的数据。
unicode
java底层使用一个16位的整数来处理字符类型,该数值是一个unicode编码值。
for(int i=0;i<=127;i++){
System.out.println((char)i+":"+i); // 打印出0~127所对应的字符
}
基本数据类型的包装类
Integer.MIN_VALUE //int类型的最小值
Integer.MAX_VALUE
int Integer.parseInt(String sInteger); // 将字符串的整数转换为int类型的数据
String Integer.toBinaryString(int value); // 将十进制数转换为二进制,返回结果为String
String Integer.toHexString(int value); // 将十进制数转化为十六进制,返回结果为String类型
补码
- 在计算机系统中,采用二进制的补码来存储。
- 最高位是符号位,0表示正数,1表示负数。
- 正数的值是其本身,负数的值是最高为不变,其他位逐位取反,再加1。
- 两数相加,若高位有进位,则进位被舍弃。(减法也可以按加法来处理)
- 正数和负数的关系是取反加一。
转义符
- \ 反斜杠
- \t 间隔 (’\u0009’)
- \n 换行 (’\u000A’)
- \r 回车 (’\u000D’)
- \d 数字 等价于 [0-9]
- \D 非数字 等价于 [^0-9]
- \s 空白符号 [\t\n\x0B\f\r]
- \S 非空白符号 [^\t\n\x0B\f\r]
- \w 单独字符 [a-zA-Z_0-9]
- \W 非单独字符 [^a-zA-Z_0-9]
- \f 换页符
- \e Escape
- \b 一个单词的边界
- \B 一个非单词的边界
- \G 前一个匹配的结束
- \u4e2d 表示unicode编码对应的字符(汉字:中)
类型转换
小类型向大类型转换
由JVM自动完成 - 转换规则:符号为会自动扩展,负数补1,正数补0 byte->short->int->long->float->double int和char类型的数据在某些情况下可以自动相互转换 如果小类型的精度值高于大类型的精度值,则有可能出现精度丢失问题。
大类型向小类型转换
强制类型转换
int i = 129;
byte b = (byte)i; // 大类型的数据位转换为小类型的符号位,逐位取反再加1,b的值为-127
int i = 257;
byte b = (byte)i; // 257超过了byte所能存储的最大位数,只能保留后8位,为1,最高位丢失了
char int
java对char类型的数据在底层是按int类型处理的。 字符类型的变量可进行数学计算。
Scanner类
用于扫描从控制台输入的数据,可以接收字符串和基本数据类型的数据。 位于java.util.Scanner包中。
String next(); // 接收一个字符串
String nextLine(); // 接收一行字符串
int nexInt(); // 接收一个Int类型的数据
double nextDouble(); // 接收一个Double类型的数据
bollean nextBoolean(); // 接收一个Boolean类型的数据
// 接收char类型的数据
// 通过charAt()方法从next()或者nextLine()获取输入的字符串。
char String.charAt(int index);
Scanner s = new Scanner(System.in);
System.out.println("姓名:");
String name = s.next();
System.out.println("性别:");
String sex = s.next();
System.out.println("年龄:");
int age = s.nextInt();
交换两个变量
在不增加其它变量的情况下:
a=a+b;
b=a-b;
a=a-b;
错误类型
- 编译期语法错误
- 运行期异常
- 运行期逻辑错误
二:语言逻辑运算
& 在两边都是整数时,是逐位与运算;在两边是关系运算时,是逻辑运算。 优先级: ! > & > |
三:数组
默认值为Null
type arrayName[] = new type[n];
type [] arrayName = null;
type arrayName[][] = new type[n][m];
初始化
- 静态初始化 为其开辟内存空间; 在创建之初直接指定内容;
int score []={1,2,3,4,5,6,7,8};
- 动态初始化 所有内容不会具体指定,都是默认值。
四:字符串
String
- 是不可更改的。
- equals比较内容
- == 比较的是地址
String.length();
Sting.toCharArray(); //字符串转化为数组
String.charAt(); // 从字符串中取出指定位置的字符串
String.getBytes(); // 字符串与byte数组的转换
String.indexOf(); // 过滤字符串中存在的字符,如果有,返回当前字符的位置,如果没有,返回-1
String.trim(); //去掉字符串的前后空格
String.subString(); // 提取子串
String.toLowerCase(); // 小写
String.toUpperCase();
String.endWith(); // 以什么开头
Sting.startWith();
String.replace(); // 替换一个字符
StringBuffer
缓冲区,本身也是操作字符串,是可以更改的。
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.insert(0,"hi");
sb.replace(1,4,"uuuu");
sb.indexOf("h");
StringBuilder
一个可变的字符列表,该类被设计作用StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。
比较
运行速度:StringBuilder > StringBuffer > String 线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的 String:适用于少量的字符串操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
五:异常
- throws
public void tell() throws Exception{}
// 表示此方法不处理异常,抛给方法的调用者处理。
自定义异常
// 自定义异常
class MyException extends Exception{
MyException(String msg){
super(msg);
}
}
... ...
try{
throw new MyException("实例化异常对象");
}catch (MyException e){
System.out.println(e+".");
}
面向对象
this关键字
- 表示类中的属性和调用方法
- 调用本类中的构造方法
- 表示当前对象
class People{
private String name;
private int age;
public People(String name,int age){
this(); //调用构造方法
this.name = name;
this.age = age;
}
public People(){
System.out.println("无参数的构造方法");
}
public void tell(){
System.out.println(this); // 表示当前对象,People@1b6d3586
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class TestThis {
public static void main(String [] args){
People p = new People("zhangsan", 90);
System.out.println(p.getAge()+" "+p.getName());
p.tell();
System.out.println(p); //People@1b6d3586
}
}
函数
Math.round() //保留小数点后面第一位
System.out.println(Math.round(1.5)+" "+Math.round(-1.5)); //2 -1