JAVA-面向对象(含基本数据类型,大数以及String)

简介

1.面向对象与类的介绍
2.基本数据类型及其包装类
3.大数(BigInteger与BigDecimal)
4.String,StringBuilder与StringBuffer

1.类与面向对象

1.1面向对象与面向过程

  1. 面向过程:分析解决问题的步骤,用函数将这些步骤一步一步实现,使用时一一调用即可。(性能较高)
  2. 面向对象:把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个一个步骤,而是为了描述某个事务在解决整个问题的过程中所发生的行为。面向对象有继承、封装和多态三大特性,故而易维护,易复用,易扩展。可设计出低耦合的系统。(性能较低)

1.2类的抽象与封装

  • 类的抽象: 将类的实现和类的使用分离,抽象与细节相对,表示在一定程度上忽略细节而着眼大局
  • 类的封装: 实现的细节被封装并且对用户隐藏

1.3类的关系(关联,聚合以及组合)

1.3.1关联

  • 常见的二元关系,描述两个类之间的活动
  • 多样性: 放置于类的边上,用于给定UML图中关系所涉及的类的对象数(*代表无范围).
    eg. 学生选组课程为学生类和课程类之间的关联

1.3.2聚集和组合(简单起见,可以不区分而都将其称为组合)

  • 组合关系使用类中数据域来实现.
  • 聚集是关联的一种特殊形式,代表了两个对象之间的归属关系.其对has-a关系进行建模.
  • 所有者对象:聚集对象,其类:聚集类.
  • 从属对象:被聚集对象,类:被聚集类.
  1. 组合: 被聚集对象的存在依赖于聚集对象. eg.名字依附于人,若人亡则名字亦不存在
  2. 聚集: 被聚集对象存在不依赖于聚集对象. eg.地址不依附于人,其客观存在,人亡与否不影响.

2.基本数据类型及其包装类(装拆箱)

八种基本数据类型及其封装类

image

  • 基本数据类型在声明时系统会自动为其分配空间
  • 引用类型声明时只是分配引用空间,必须实例化开辟数据空间后才可赋值。
  1. 基本数据类型值不是对象,但是可以用Java API中的包装类来包装成一个对象.
  2. java.lang包里为基本数据类型提供了Boolean, Character, Double, Float, Byte, Short, Integer, Long等包装类
  3. 数值包装类实例有xxxValue()的方法将对象转换为基本类型值
  4. 数值包装类有valueOf()方法将创建一个对象并将其初始化为指定包装类型值
  5. 既可以用基本数据类型也可用字符串类构造包装类. eg.new Double("5.44");
  6. Java可以根据上下文自动地将基本类型与包装对象进行转换(装箱与拆箱).

注意事项:

  1. 包装类没有无参构造方法
  2. 包装类的实例不可改变(一旦创建不再改变)

简介

  1. 每个数值包装类都有常量MAX_VALUE, MIN_VALUE对应其基本数据类型的最大最小值
  2. 每个数值包装类实例都包含各自方法doubleValue(),floatValue(),xxxValue()...返回包装对象对应的基本数据类型。
  3. 包含实例compareTo方法用于比较两个数值(1,0,-1)i.compareTo(j);,i>j返回1
  4. 可能含有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.字符串和字符数组之间的转换

类似于基本数据类型与包装类之间的转换。

  1. 字符串转换为字符数组: toCharArray();
    eg. char[] ch = s.toCharArray();
  2. 字符数组->字符串: 构造方法或方法valueOf();
    eg. String s = String.valueOf(ch);

5.将字符和数值转化为字符串

  1. String str = xxx + "";
  2. 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为长度

posted @ 2021-07-28 16:52  rttrti  阅读(149)  评论(0)    收藏  举报