JAVA-面向对象(含基本数据类型,大数以及String)
简介
1.面向对象与类的介绍
2.基本数据类型及其包装类
3.大数(BigInteger与BigDecimal)
4.String,StringBuilder与StringBuffer
1.类与面向对象
1.1面向对象与面向过程
- 面向过程:分析解决问题的步骤,用函数将这些步骤一步一步实现,使用时一一调用即可。(性能较高)
- 面向对象:把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个一个步骤,而是为了描述某个事务在解决整个问题的过程中所发生的行为。面向对象有继承、封装和多态三大特性,故而易维护,易复用,易扩展。可设计出低耦合的系统。(性能较低)
1.2类的抽象与封装
- 类的抽象: 将类的实现和类的使用分离,抽象与细节相对,表示在一定程度上忽略细节而着眼大局
- 类的封装: 实现的细节被封装并且对用户隐藏
1.3类的关系(关联,聚合以及组合)
1.3.1关联
- 常见的二元关系,描述两个类之间的活动
- 多样性: 放置于类的边上,用于给定UML图中关系所涉及的类的对象数(*代表无范围).
 eg. 学生选组课程为学生类和课程类之间的关联
1.3.2聚集和组合(简单起见,可以不区分而都将其称为组合)
- 组合关系使用类中数据域来实现.
- 聚集是关联的一种特殊形式,代表了两个对象之间的归属关系.其对has-a关系进行建模.
- 所有者对象:聚集对象,其类:聚集类.
- 从属对象:被聚集对象,类:被聚集类.
- 组合: 被聚集对象的存在依赖于聚集对象. eg.名字依附于人,若人亡则名字亦不存在
- 聚集: 被聚集对象存在不依赖于聚集对象. eg.地址不依附于人,其客观存在,人亡与否不影响.
2.基本数据类型及其包装类(装拆箱)
八种基本数据类型及其封装类

- 基本数据类型在声明时系统会自动为其分配空间
- 引用类型声明时只是分配引用空间,必须实例化开辟数据空间后才可赋值。
- 基本数据类型值不是对象,但是可以用Java API中的包装类来包装成一个对象.
- java.lang包里为基本数据类型提供了Boolean, Character, Double, Float, Byte, Short, Integer, Long等包装类
- 数值包装类实例有xxxValue()的方法将对象转换为基本类型值
- 数值包装类有valueOf()方法将创建一个对象并将其初始化为指定包装类型值
- 既可以用基本数据类型也可用字符串类构造包装类. eg.new Double("5.44");
- Java可以根据上下文自动地将基本类型与包装对象进行转换(装箱与拆箱).
注意事项:
- 包装类没有无参构造方法
- 包装类的实例不可改变(一旦创建不再改变)
简介
- 每个数值包装类都有常量MAX_VALUE, MIN_VALUE对应其基本数据类型的最大最小值
- 每个数值包装类实例都包含各自方法doubleValue(),floatValue(),xxxValue()...返回包装对象对应的基本数据类型。
- 包含实例compareTo方法用于比较两个数值(1,0,-1)i.compareTo(j);,i>j返回1
- 可能含有parseXxx(String s)方法将一个xxx数值字符串s转化为一个xxx值
基本类型和包装类类型之间的自动转换
- 装箱:基本数据类型值转换为包装类对象的过程 Integer.valueOf()
- 拆箱:包装类转换为基本数据类型 i.intValue()
注: 通过valueOf()方法创建Integer对象时,若数值在[-128,127]之间便返回IntegerCache.cache中已经存在的对象的引用,否则创建一个新得Integer对象。
Integer i1 = 100, i2 = 100, i3 = 200, i4 = 200;
i1 == i2;//true
i3 == i4;//false
三、BigInteger类和BigDecimal类
- 当进行大精度/大数运算时可用BigInteger类和BigDecimal类来进行
- 创建方法newBigXxxx(String s)
- 常见方法: add, subtract, multiple, divide, remainder
四、String、StringBuilder、StringBuffer
- String对象不可改变-字符串一旦创建,内容不能再改变(改变或为创建了新得对象,栈内存不变,堆内存改变)
 private final char[] values;
- StringBuffer与StringBuilder均可变
 char[] values;
- StringBuilder单线程操作字符串,线程不安全
- StringBuffer多线程操作字符串,线程安全
1.驻留字符串
eg.
String s1 = "Java';
String s2 = new String("Java);
String s3 = "Java;
则s1==s3且s1!=s2
s1,s3指向了相同的驻留字符串"Java",而s1与s2为不同的字符串对象
2.替换和拆分
- 替换: replace(); String
- replace, replaceFirst, replaceAll
- 拆分: split(); String
- 以上都为返回一个源自元素是字符串的新字符串(组)
3.使用模式匹配,替换和拆分
- 正则表达式(regex): 为一个字符串,用于描述匹配一个字符串集的模式.可以通过指定某个模式来匹配,替换和拆分一个字符串.
- matches(String s): s为正则表达式. 替换和拆分中的参数也可用正则表达式代替
4.字符串和字符数组之间的转换
类似于基本数据类型与包装类之间的转换。
- 字符串转换为字符数组: toCharArray();
 eg. char[] ch = s.toCharArray();
- 字符数组->字符串: 构造方法或方法valueOf();
 eg. String s = String.valueOf(ch);
5.将字符和数值转化为字符串
- String str = xxx + "";
- valueOf()方法
6.格式化字符串
- 
String.format(format, item1, item2, ...); 
- 
与printf类似. printf显示而format返回 
 eg.String s = String.format("%7.2f%6d%-4s", 45.556, 14, "AB"); 
 显示: ..45.56....14AB.. (..表示空格)
7.StringBuilder与StringBuffer
- 类似于String类,但其可以改变
- 二者主要区别在于StringBuffer类中修改缓冲区的方法是同步的(只有一个任务被允许执行该方法)(适用于多任务并发访问),对方法或调用的方法加了同步锁; 单任务访问时StringBuilder更有效,其未加同步锁。
- 构造方法:StringBuilder(),(capacity: int),(s: String)
- 方法: 30多个用于管理该构建起以及修改该构建器字符串的方法.
1.修改
| java.lang.StringBuilder | 作用 | 
|---|---|
| append(data: char[]) : StringBuilder | 追加一个字符数组 | 
| append(data: char[], offset: int, len: int) :... | 追加data中的指定子数组 | 
| append(v: primitiveType): ... | 将一个基本类型值作为字符串追加 | 
| append(s: String) | 追加一个字符串 | 
| delete(startIndex: int, endIndex: int):... | 删除指定范围的字符 | 
| deleteCharAt(index: int):... | 删除给定下标的字符 | 
| insert(index: int, data: char[], offset: int, len: int):... | 给定下标为止插入数组data的子数组 | 
| insert(offset: int, data: char[]):... | 向offset位置插入data | 
| insert(offset: int, b: primitiveType):... | 向指定位置插入一个转换为字符串的值 | 
| insert(offset: int, s:String):... | offset位置插入字符串 | 
| replace(startIndex: int, endIndex: int, s:String) | 指定位置替换为给定字符串 | 
| reverse() | 倒置 | 
| setCharAt(index: int, ch: char) | 指定下标设置为新得字符 | 
2.toString, capacity, length, setLength, charAt方法
注:capaciy为容量,length为长度
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号