黑马程序员--Java基础学习笔记【Object类、String类】

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  • Object类

在Java类继承结构中,java.lang.Object类位于顶端。

所有类都直接或间接继承Object类。

(接口不能继承Object类,接口中隐含定义了Object类的所有公共方法,但是全抽象)

Object类型的引用变量可以指向任何类型对象。

Object类成员方法

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());// 类名@散列码

}

重写toString方法

public String toString() {

return getClass().getName() + " [name= "+ name + " , salary= " + salary + "]"; // 类名[域值]

}

publicfinalnative Class<?> getClass();

publicbooleanequals(Object obj){

return(this== obj);

}

  • “==”和equals 区别

前者是比较运算符,后者是方法

前者比较基本类型,符号两端数据是否相等

比较引用类型,符号两端引用类型的地址是否相等,即是否指向相同的对象

equals 方法

不重写的情况下,默认同“==”,比较的是对象的地址

可以重写方法建立对象自己的比较方法,比较成员变量的值

protectedvoid finalize() throws Throwable { }

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

  • final,finally, finalize 的区别

final是一个修饰符,修饰类不能被继承,修饰变量必须在声明时给定初值,且不可修改,修饰方法不能被重载。

finally用在异常处理时提供finally块来执行任何清除操作,如果抛出异常,先执行相匹配的catch子句,再进入finally块执行。

finalize是方法名,Java允许使用该方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

  • Scanner类SinceJDK5获取用于键盘输入

构造方法 public Scanner(InputStream source)

成员方法hasNextXXX(), nextXXX()

  • String类
  • String是不可变对象

java.lang.String使用了final修饰,不能被继承

字符串底层封装了字符数组及针对字符数组的操作算法

字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值

  • String类的构造方法

public String()

public String(byte[] bytes)

public String(byte[] bytes, int offset, intlength)

public String(char[] value)

public String(char[] value, int offset, intcount)

public String(String original)

字符串是常量,创建之后不能更改,证明String对象的不变性

String string = "www.itcast.cn";

System.out.println(string);// www.itcast.cn

method(string);

System.out.println(string); // www.itcast.cn

voidmethod(Strings) {

s = s + "0807Java";

}

  • Sting 常量池

Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串;对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象。

String str1= "itcast";

// 不会创建新的String对象,而是使用常量池中已有的"itcast"

Stringstr2= "itcast";

System.out.println(str1 == str2); // true

// 使用new 关键字会创建新的String对象

// 创建了2个对象,new String()和 "itcast"

Stringstr3= newString("itcast");

System.out.println(str1 == str3); // false

// String类重写了equals方法

System.out.println(str1.equals(str3)); // true

String类的判断方法

boolean equals(Object obj)

boolean equalsIgnoreCase(String str)

boolean contains(String str)

boolean startsWith(String str) // 检测字符串是否以指定字符串开头

boolean endsWith(String str)

boolean isEmpty()

String类的获取功能

int length()

char charAt(int index) // 获取指定索引上的字符

int indexOf(int ch) // 获取指定字符第一次出现位置的索引,没有返回-1

int indexOf(String str)

int indexOf(int ch, int fromIndex)

int indexOf(String str, int fromIndex)

int lastIndexOf(String str, int from) // 返回最后一个出现的位置

String substring(int beginIndex)

String substring(int beginIndex, int endIndex)

String 类的转换功能

byte[] getBytes()

char[] toCharArray()

static String valueOf(char[] chs) // 字符数组à字符串

static String valueOf(Object obj) // 其他类型à字符串

String toLowerCase() // 将字符串中的大写字母转成小写

String toUpperCase()

String concat(String str) // 将指定字符串str连接到调用字符串的结尾,返回一个新的字符串对象

其他功能

String replace(char old, char new)

String replace(String old, String new)

String trim() // 去掉字符串首尾两端的空格

int compareTo(String str) // 按字典顺序比较

int compareToIgnoreCase(String str)

String[] split(String regex) // 按照正则表达式的匹配拆分字符串

// 自定义方法实现两个字符串的比较,完全相等返回 true

publicstaticboolean isEqual(String str1, String str2) {

// 将两个字符串分别转换成字符数组

char[] array1 = str1.toCharArray();

char[] array2 = str2.toCharArray();

// 比较两个字符数组的长度,如果相等,继续比较数组元素

if (array1.length == array2.length) {

// 遍历字符数组

for (inti = 0; i < array1.length; i++) {

// 比较当前索引元素是否相等,不相等返回 false,停止继续比较

if (array1[i] != array2[i]) {

returnfalse;

}

}

// 字符数组遍历完毕,每个元素值都相等,返回 true

returntrue;

}

// 当字符数组长度不同时,直接返回 false

returnfalse;

}

// 自定义方法实现两个字符串的比较,完全相等返回 true

publicstaticboolean isEqual2(String str1, String str2) {

if (str1.length() == str2.length()) {

for (inti = 0; i < str1.length(); i++) {

if (str1.charAt(i) != str2.charAt(i)) {

returnfalse;

}

}

returntrue;

}

returnfalse;

}

// 将字符串中的英文字符进行大小写互转

publicstatic StringtoAnotherCase(String string) {

// 将字符串转换成字符数组

char[] array = string.toCharArray();

// 遍历字符数组,根据判断ASCII值判断其大小写状态并进行转换

for (inti = 0; i < array.length; i++) {

// 大写字母 --> 小写字母

if (array[i] >= 65 && array[i] <= 90) {

array[i] += 32;

}elseif(array[i] >= 97 && array[i] <= 122) { // 小写字母 --> 大写字母

array[i] -= 32;

}// 其他字符不处理

}

// 将字符数组转换成字符串

//     StringanotherCase = String.valueOf(array);

StringanotherCase= newString(array);

// 返回转换后的字符串

returnanotherCase;

}

// 判断一个字符串是不是回文

publicstaticboolean isPalindrome(String string) {

// 限制判断字符的长度不小于 3 个字符,且必须是奇数

if (string.length() >= 3&& string.length()% 2 == 1) {

// 将字符串转换成字符数组

char[] array = string.toCharArray();

// 从字符数组索引的头尾两端取元素判断是否相等,不相等直接返回 false

for (intmin = 0, max = array.length - 1; min < max; min++, max--) {

if (array[min] != array[max]) {

returnfalse;

}

}

// 判断完毕没有不相等的元素则返回 true

returntrue;

}

// 字符长度小于3,直接返回 false

returnfalse;

}

// 统计字符串中大小写字母数字其他字符出现的次数

publicstaticvoid count(String string) {

// 计数器

intupper = 0, lower = 0, digit = 0, other = 0;

// 遍历数组

for (inti = 0; i < string.length(); i++) {

// 取出数组中每个位置上的字符元素

charch = string.charAt(i);

if (ch >= ‘a‘ && ch <= ‘z‘) { // 判断小写

lower++;

}elseif(ch >= ‘A‘ && ch <= ‘Z‘) { // 判断大写

upper++;

}elseif(ch >= ‘0‘ && ch <= ‘9‘) { // 判断数字

digit++;

}else{ // 其他字符

other++;

}

}

//     other= string.length() - lower - upper;

System.out.println("lower= "+ lower);

System.out.println("upper= "+ upper);

System.out.println("digit= "+ digit);

System.out.println("other= "+ other);

}

// 统计一个字符串在另一个字符串中出现的次数

publicstaticvoid countTimes(String string, String sub) {

// 计数器,index保存当前查找结果的索引

intcount = 0, index = 0;

// 循环查找,结束条件是在目标串中查找不到子串

while ((index = string.indexOf(sub)) != -1) {

count++;

// 截取字符串,保留此次索引+字串长度以后的部分

string = string.substring(index + sub.length());

}

System.out.println("共出现" + count + "次");

}

// 将字符串反转,结果返回反转之后的字符串

publicstatic String reverse(String string) {

// 字符串 --> 字符数组

char[] cs = string.toCharArray();

// 交换首尾两端的数组元素,实现位置反转

for (intmin = 0, max = cs.length - 1; min < max; min++, max--) {

chartemp = cs[min];

cs[min] = cs[max];

cs[max] = temp;

}

// 字符数组 --> 字符串

string = new String(cs);

returnstring;

}

  • StringBuffer和StringBuilder

封装可变的字符串,对象创建后可以通过调用方法改变其封装的字符序列。

StringBuffer线程安全的可变字符序列,StringBuilder线程不安全的可变字符序列

构造方法

StringBuffer() // 空的字符串缓冲区,默认初始容量16个字符

StringBuffer(int capacity) // 指定容量

StringBuffer(String str) // 字符串 -->字符串缓冲区

成员方法

public StringBuffer append(String str) // 追加字符串

public StringBuffer insert(int offset,String str) // 插入字符串

public StringBuffer deleteCharAt(int index)// 删除字符

public StringBuffer delete(int start, intend) // 删除字符串

public StringBuffer replace(int start, intend, String str) // 替换字符串

public StringBuffer reverse() // 字符串反转

public String substring(int start) // 获取子串

public String substring(int start, int end)

StringBufferbuffer= newStringBuffer("www.itcast.cn");

System.out.println(buffer); // www.itcast.cn

System.out.println("证明缓冲区可变");

method(buffer);

System.out.println(buffer); // www.itcast.cn0807Java

// 定义方法向缓冲区中追加字符串

void method(StringBuffer buffer) {

buffer.append("0807Java");

}

// 定义方法实现缓冲区反转

publicstaticvoidreverseBuffer(StringBuffer buffer) {

// 缓冲区变成字符串,变成字符数组

char[] ch = buffer.toString().toCharArray();

// 数组反转

for (inti = 0, j = ch.length - 1; i < j; i++, j--) {

chartemp = ch[i];

ch[i] = ch[j];

ch[j] = temp;

}

// 数组变成缓冲区,清空原有缓冲区

buffer.delete(0,buffer.length());

buffer.append(ch);

}

时间: 2024-10-13 00:27:33

黑马程序员--Java基础学习笔记【Object类、String类】的相关文章

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

黑马程序员--Java基础学习笔记【序列化、多线程】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 序列化流与反序列化流 ObjectOutputStream 对象输出流 writeObject(Object obj) 可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中 ObjectInputStream对象输入流 readObject(Objectobj) 从源输入流中读取字节序列,反序列化为一个对象并返回 序列化:将数据分解成字节流,以便存储在文件中或在网络上传输

黑马程序员--Java基础学习笔记【正则表达式、常用API】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 正则表达式 正则表达式的组成规则 java.util.regex.Pattern 常见组成规则 字符集合 [abc] a.b.c中任意一个字符 [^abc] 除了a.b.c的任意字符 [a-z] a-z中的任意一个字符 [a-zA-Z0-9] a-z.A-Z.0-9中任意一个字符 [a-z&&[^bc]] a-z中除了b和c以外的任意一个字符 预定义字符集 .任意一个字符 \d 任意一个

黑马程序员--java基础学习笔记8

 一.笔记内容概述: 面向对象(数组工具对象建立-文档注释-单例设计模式&内存图解).继承.单继承和多重继承. 二.常用内容介绍: 1.继承的好处:提高了代码的复用性;让类与类之间产生了关系;开发最终的核心内容:不断地创建对象,使用对象,并维护着对象之间的关系. 2.什么时候使用继承? 当类与类之间存在着所属关系的时候,就定义继承;java不直接支持多继承,因为多个父类中如果有相同成员时,就会出现调用的不确定性;java中通过多实现implements的方式来间接体现多继承; 3.如何学习一

黑马程序员--Java基础学习笔记【集合-Set】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Set 接口特点: 不允许存储重复元素,无序集合:存储取出没有顺序(不保证迭代顺序),没有索引 Set接口方法,和父接口Collection抽象方法完全一样 Set接口存储对象并迭代,找实现类HashSet集合 HashSet 如何保证元素唯一? Set里的元素是不能重复的,使用 equals() 方法和 hashCode() 方法来区分重复与否.覆盖 equals() 方法.hashCode

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

黑马程序员--Java基础学习笔记【异常处理】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 异常 异常就是Java程序在运行过程中出现的导致程序无法正常运行的错误. Java 中异常继承体系,顶层的类 java.lang.Throwable java.lang.Exception 所有异常的超类 RuntimeException 运行时异常可以不处理 非RuntimeExceptioin非运行时异常必须捕获处理 java.lang.Error 所有错误的超类 异常处理机制 当程序中抛

黑马程序员--Java基础学习笔记【集合-Map】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Map 接口 Map 接口定义的集合,又称查找表 Map 接口和 Collection 接口没关系 Map 集合派系,存储映射键值对 不允许重复的键,每个键最多映射 1 个值 根据内部数据结构不同,Map 接口有多种实现类: 常用的有内部为 hash 表实现的 HashMap 和内部为排序二叉树实现的 TreeMap Map 接口和 Collection 接口的不同 Map 和 Collect

黑马程序员--java基础学习笔记6

一.笔记内容概述: 面向对象(概述&举例).类与对象的之间的关系.类与对象体现&细节.对象的内存体现.成员变量和局部变量的区别.类类型参数.匿名对象.基本数据类型参数传递图解.引用数据类型参数传递图解.封装&代码示例.面向对象(封装&思想).二维数组&定义方式&内存图解&另一种定义方式&应用场景. 二.常用内容介绍: 1.面向对象的特征: a.封装:将具体动作封装起来,方便调用,提高了代码的复用性和安全性. b.继承:继承某个类后,可以直接调