JAVA笔记三:运算&字符

运算符:运算符由Java提供,不支持重载(即运算符提供了什么能力,就只能用什么能力)。
除了=,==和!=外,其他操作符都只能操作基本数据类型(包装类通过自动拆装箱也能完成运算)。优先级基本上从高到低。
• 算术运算符:+ - * / % ++ —
⁃ + 有个特例,String类不是数据类型但可以使用+,这实际上不是运算符的重载,而是Java提供了一个语法糖(看上去是+,实际编译时就被替换成了StringBuffer.append)。
• 关系运算符:== != > <
⁃ ==对于基本数据类型,比较值;对于对象,比较内存地址。所以一般类比较使用的是equals方法(Object类中提供了默认equal方法,基于==实现)。
• 位运算符:>> >>> << & ^ | ~
• 逻辑运算符:&& || !
• 赋值运算符: = += -=
• 三元运算符: variable x = (expression) ? value if true : value if false
• instanceof: 对象实例 instanceof 类名/接口名
• Math.
⁃ max(val1,val2);
⁃ pow(x,y);

包装类:基本数据类型是没有面向对象的特点的,包装类把基本数据类型包装成了对象,使得使用起来和其他普通类没有什么区别(比如Integer a=new Integer(1))。
⁃ 装箱:把基本类型赋值给包装类的动作叫装箱(Integer num3 = 3),装箱是系统自动完成的。装箱和new有一些区别,new一定会生成一个新的对象,装箱则不一定(对所有整型包装类,Java都实现了常量池技术,会把一些常用的int数字-128~127先事先生成好Integer对象放在内存的方法区里,装箱时就把这个生成好的对象返回给变量,所以有可能出现两个对象变量指向的是同一对象)。
⁃ 拆箱:反之为拆箱(int num4 = num3)。包装类里都有形为××Value()(比如num3.intValue())的方法,效果类似。
• Number类型:所有的数据包装类(Byte、Short、Integer、Long、Float、Double)都是抽象类Number的子类。
⁃ byte/Byte
1 byte(8 bit)
存储字节数据(使用较多)
⁃ short/Short
2 byte(16 bit)
兼容性考虑(使用较少)
⁃ int/Integer
4 byte(32 bit)
存储普通整数(非常常用)
⁃ long/Long
8 byte(64 bit)
存储长整型(常用)
⁃ float/Float
存储浮点数(使用较少)
⁃ double/Double
存储双精度数(使用较多)
• Boolean类
@boolean/Boolean
1 byte(8 bit )
存储逻辑变量(非常常用)
• Character类
char/Character
2 byte(64 bit)
存储字符数据(使用较多)
• 运算
⁃ 次方,(int)Math.pow(2,5);返回double,需要强转
⁃ x%10
⁃ x/10

字符串类:三种字符串类,实际上都是对char[]的封装类,实现了CharSequence接口,只是使用场景不同。
• String类:是final修饰的类,并且类里的三个关键成员变量也都是final修饰的,而且也没有提供公共的set方法,所以String对象一旦产生,就无法被更改,这主要是出于安全考虑(比如其它人有可能调用set方法,修改存放的url、密码等关键信息。)。调用String a=“abc”;效果和a=new Sting(“abc”);都是new了一个新的对象给引用变量,而不是修改原有对象(差别是前者因为常量池技术所以存在jvm内存的方法区,后者存在堆中);所以,每个String的方法都是有返回值的,返回一个新的String。如果频繁修改,可能会占用较大的内存。
⁃ valueOf(基本数据类型):一个特殊的静态方法,用于转换基本数据类型为String。神奇的是,包装类也有这个静态方法,用来把String转换成包装类。
⁃ Object对象实例.toString():toString是Object的方法,所以任何类对象都可以用它转换成String。
⁃ 常用方法:

Chara=s.charAt(indexint );
str1.concat(str2);
Str1.equals(str2);
        s.length();
s.indexOf(substr,startint);
s.substring(starting,ending);0开始数,返回不包括第end个字符

• StringBuilder类:没有final修饰,对象可变。需要通过new来初始化。
• StringBuffer类:可以认为是线程安全的StringBuilder。
⁃ 常用方法:

String
 newstr =new StringBuffer(oldstr
).reverse().toString()

日期和时间类:
• util.Date类:已弃用。需要联合DateFormat才能初始化一个对象出来。
如下三个sql类均继承继承util.Date。
• sql.Date类:
• sql.Time类:
• sql.Timestamp类:
• Calendar类:util.Date的替代方案。不能直接初始化,需要通过静态方法getInstance()获取实例化的对象。

正则表达式java.util.regex包:
• Pattern类:pattern对象没有公共构造函数,只能通过一个静态方法返回类实例(Pattern.compile(”String类的正则表达式字符串”))。
• Matcher类:Matcher对象执行匹配字符串的操作,没有公共构造方法,只能通过调用Pattern对象的matcher方法来获得(Matcher对象实例=Pattern对象实例.matcher(“任何CharSequence类的待匹配字符串”))。
• PatternSyntaxException:PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
• 匹配方式:正则表达式一般为前瞻匹配,即每检查到一个字符,都先检查一下其后的字符是否符合表达式的第一部分匹配模式,不符合则再往后移动一位(如果加了,则只有第一个字符开始满足要求才行,不会往后移动了,因为后面的都不符合这个表达式了),直到匹配到为止。匹配到后,则采用上述模式,继续匹配表达式的第二部分,直到全部匹配整个表达式,则找到匹配字符串。
⁃ 匹配字符集:【.】表示换行以外的字符,【[^abc]】表示abc以外的字符,【\某个字符】有特殊含义比如数字(\d)非数字(\D)。
⁃ 匹配次数:【.】是匹配所有字符,字符出现n次;【[^abc]】是匹配所有abc以外的字符,字符出现n次。
⁃ 转义:正则中有特殊含义的字符,如果想匹配,则需要转义(【.】匹配字符.)。
⁃ 匹配不存在某个字符串的内容:【(?!字符串)】。
⁃ 或:正则中没有与,只有或【|】。
⁃ 分组:

Throwable包含Error和Exception类:
• 检查型/强制异常(CheckedException):在预期范围内的异常。在Java中所有不是RuntimeException派生的Exception都是检查型异常。当函数中存在抛出检查型异常的操作时该函数的函数声明中必须包含throws语句。调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句。在JDK代码中大量的异常属于检查型异常,包括IOException,SQLException等等。
• 非检查型/非强制异常(UncheckedException):不应该出现的异常。在Java中所有RuntimeException的派生类都是非检查型异常,与检查型异常对比,非检查型异常可以不在函数声明中添加throws语句,调用函数上也不需要强制处理。常见的NullPointException,ClassCastException是常见的非检查型异常。非检查型异常可以不使用try…catch进行处理,但b是如果有异常产生,则异常将由JVM进行处理。对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try…catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try…catch的异常处理机制进行处理。
• Error:不应该出现,出现了也无法处理的异常。
• 异常处理:
⁃ 捕获异常:try,catch,finally。执行顺序为try,catch在终止方法(break,continue,return)前的所有语句,finally的所有语句,catch的终止方法语句。所以如果finally中有终止方法语句,那么catch的终止方法语句不会被执行。当用多个 catch 语句时,catch 语句块在次序上有先后之分。从最前面的 catch 语句块依次先后进行异常类型匹配
⁃ 抛出异常:throws,throw。只有检查类异常应该被抛出。

   public void test() throws MyException{
        try {
            int i = 10/0;
        } catch (ArithmeticException e) {
            throw new MyException("This is MyException"); 
        }
    }

你可能感兴趣的:(JAVA笔记三:运算&字符)