2018-07-17



一:变量与数据类型

  • 基本数据类型
    • 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();    // 替换一个字符

getBytes

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