01Java常用类
Object类
Object概述
Object类是超类,基类,所有类都默认直接继承Object类。
Object类中定义的方法,是所有对象都具备的方法。
Object类可以存储任何类
- 可以作为对象的形式参数
- 可以作为对象的返回值
getClass()方法
- public final Class<?> getClass(){}
- 返回的是引用中存储的实际对象类型。
- 通常用于比较两个引用中的实际存储对象类型是否一致。
示例如下:
public static void main(String[] args) {
Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28);
//判断liming和zhang是不是一个类型
Class<? extends Student> aClass = liming.getClass();
Class<? extends Student> aClass1 = zhang.getClass();
if (aClass == aClass1){
System.out.println("同一个类型");
}else {
System.out.println("不是同一个类型");
}
/**
同一个类型
**/
}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
hashCode()方法
- 返回一个对象的哈希码值。
- 哈希值是根据对象的地址或字符串或数字使用hash算法算出来的int型整数。
- 一般相同对象返回相同的哈希码。
示例如下:
public static void main(String[] args) {
Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28);
//hashCode方法
System.out.println(liming.hashCode());//输出:460141958
System.out.println(zhang.hashCode());//输出:1163157884
Student s1 = liming;
System.out.println(s1.hashCode() == liming.hashCode()); //true
}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
toString()方法
public String toString(){}
返回对象的字符串表示
子类可以覆盖该方法。
示例如下:
public static void main(String[] args) {
Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28);
System.out.println(liming.toString());
System.out.println(zhang.toString());
/**
输出:
Student{name='Liming', age=30}
Student{name='Zhang', age=28}
**/
}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
equals()方法
- public boolean equals(Object obj){}
- 默认实现为(this == obj),比较两个对象地址是否相等。
- 子类可以重写覆盖比较值。
示例如下:
public static void main(String[] args) {
Student liming = new Student("Liming", 30);
Student zhang = new Student("Zhang", 28);
Student s1 = new Student("Liming", 30);
System.out.println(liming.equals(zhang));//false
System.out.println(liming.equals(s1));//true
}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) //先比较地址
return true;
if (o == null) //再判断是否为空指针
return false;
if (o instanceof Student) { //是否是Student原型链上的类,如是,则比较属性;不是,判定为false
Student student = (Student) o;
return age == student.age &&
name.equals(student.name);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
finalize()方法
- 当对象被判断为垃圾对象时,JVM自动调用此方法,用于标记垃圾对象,进入回收队列。
- 垃圾对象:当没有有效引用指向该对象时,判断为垃圾对象。
- 垃圾回收:由CG销毁该对象,释放数据存储空间。
- 自动回收机制:JVM内存耗尽时,一次性回收所有垃圾对象。
- 手动回收机制:使用System.gc();通知JVM执行垃圾回收。
类可以重写该方法在对象被JVM垃圾回收时输出一些语句。
System.out.println(this.name + "被回收了");
注:finalize()方法在Java9后被弃用。
包装类
包装类概述
- 包装类是基本类型所对于的引用数据类型。
- 八种基本类型都有包装类,其中char的包装类为Character类。
基本类型与包装类之间的类型转换
拆箱与装箱
- 装箱:把基本类型转为引用类型
- 拆箱:把引用类型转为基本类型
抽象类父类Number类下有六大子类
Integer、Double、Float、Byte、Short、Long
使用包装子类实现的Number类中抽象方法intValue()、doubleValue()等等进行拆箱。
使用包装类的构造方法或者类中的valueOf(基本类型值)实现装箱。
自动拆箱和自动装箱
在jdk1.5之后,我们能够使用等号直接进行类型转换
示例如下:
Integer i1 = 10;//自动装箱
int i2 = i1;//自动拆箱
- 自动拆箱和自动装箱的原理:编译器在编译时自动调用valueOf()和intValue()方法进行装箱和拆箱。
注意:Integer比较两种包装类中的值是否相等时,最好使用equals()方法,如果使用==,则可能会出错。(其他精度要求高的包装类不会存在缓冲池)
原因如下:在使用valueOf()装箱后的Integer类,如果基本类型的值在-128到127之间,则方法会返回整数缓存区中的对象,这样进行比较的就会是同一个对象,比较相同的值的话,就会是true。如果在这个范围之外,那么就会直接使用new关键字创建新的对象,相同的值进行比较则会是false。
parseXxx()方法的使用
使用包装类的静态方法parseXxx()可以把字符串转换为对于数字类型。
示例如下:
String s1 = "150";
int i1 = Integer.parseInt(s1);
String s2 = Integer.toString(i1);
String类
String类概述
- 字符串是常量,创建之后不能改变。
- 字符串字面值存储在字符串池中,可以共享。
示例如下:
String str = "hello";
str = "hh";
str存储hello字符串的地址,位置在栈中;"hello"则被放在方法区的字符串常量池中。修改变量str的值,会在方法区中重新创建一个字符串hh,修改str地址指向hh,hello会被JVM标记为垃圾对象。
String str1 = new String("java");
使用new关键字创建字符串对象,java字符串字符串常量池中创建一个对象,同时在堆中创建一个对象,指向字符串常量池的地址。而栈中str1存储的地址是堆中的地址。
注意:在JDK6以及之前的版本,字符串常量池是在方法区中,但是在JDK7之后,字符串常量池被移到堆中。
String类常用方法总结
public int length():返回字符串的长度。
public char charAt(int index) :根据下标获取字符。
public boolean contains(String str) :判断当前字符串中是否包含str。
public char[] toCharArray() :将字符串转换成char数组。
public int indexOf(String str,[int beginFindIndex]):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
public String trim():去掉字符串前后的空格。
public String toUpperCase():将小写转成大写。
public boolean endWith(String str):判断字符串是否以str结尾。
public String replace(char oldChar, char newChar):将旧字符串替换成新字符串。
public boolean equals(String anotherString):比较字符串内容是否相等。
public boolean equalsIgnoreCase(String anotherString):忽略大小写比较字符串内容是否相等。
public int compareTo(String anotherString):比较字符串内容的ASSIC码值大小,并且返回的整数值的公式是(this-anotherString)。
public String[] split(String str):根据str(内容可以是正则表达式)做拆分成String数组。
public String subString(int beginIndex,[int endIndex]):得到字符串的子串。
StringBuffer和StringBuilder
StringBuffer:可变长字符串,JDK1开始提供,运行效率慢,线程安全。
先开辟一个缓冲区,之后在缓冲区中操作。
比String效率高,而且更节省内存。
常用方法如下:
1. append(String str);在末尾添加str
2. insert(int offset,String str);在offset下标处插入str
3. reverse();反转字符串内容
4. replace(int startIndex,int endIndex(不包含该下标),String str);替换从下标startIndex到endIndex-1的字符串为str
5.delete(int startIndex,int endIndex(不包含该下标));删除从下标startIndex到endIndex-1的字符串
- StringBuilder:可变长字符串,JDK5开始提供,运行效率快,线程不安全。
- 常用方法与StringBuffer一样。
看bilibili千锋教育后的一些小白笔记与总结。边学习边成长。欢迎在文章下探讨~~
了解狂神说在以下链接:https://space.bilibili.com/146668655
01Java常用类的更多相关文章
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Java集合常用类特点整理
集合的结构如下图所示: 集合的两个顶级接口分别为:Collection和Map Collection下有两个比较常用的接口分别是List(列表)和Set(集),其中List可以存储重复元素,元素是有序 ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
- java-API中的常用类,新特性之-泛型,高级For循环,可变参数
API中的常用类 System类System类包含一些有用的类字段和方法.它不能被实例化.属性和方法都是静态的. out,标准输出,默认打印在控制台上.通过和PrintStream打印流中的方法组合构 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- iOS 杂笔-24(常用类到NSObject的继承列表)
iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承 ...
- java的eclipse操作和常用类Object的使用
1.eclipse的快捷键: (1)alt + / 内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...
- java总结第四次//常用类
六.常用类 主要内容:Object类.String类.Date类.封装类 (一)Object类 1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则 ...
- JAVA基础知识之IO——Java IO体系及常用类
Java IO体系 个人觉得可以用"字节流操作类和字符流操作类组成了Java IO体系"来高度概括Java IO体系. 借用几张网络图片来说明(图片来自 http://blog.c ...
随机推荐
- Cpp 友元简述
友元函数,友元类 使用友元,主要是易于直接访问数据,但友元本质是以破坏封装性为代价. 下例引用于: <C++程序设计(第2版)> 友元声明位置由程序设计者决定,且不受类中public.pr ...
- Vue18 过滤器
1 简介 过滤器(filter)是输送介质管道上不可缺少的一种装置,大白话,就是把一些不必要的东西过滤掉,过滤器实质不改变原始数据,只是对数据进行加工处理后返回过滤后的数据再进行调用处理,我们也可以理 ...
- (二) MdbCluster分布式内存数据库——分布式架构1
(二) MdbCluster分布式内存数据库--分布式架构1 分布式架构是MdbCluster的核心关键,业界有很多相关的实现,却很少有文章详细的解释每个架构实现背后的细节和这么做的原因.在Mdb ...
- VS 撰写生成了多个撰写错误,其根本原因有X点,如下所列。有关详细信息,请查看CompositionException.Error属性
打开VS开发程序,莫名其妙的出现如下图错误: 网上找了很多资料,有前辈说以下方法: 解决方案如下 打开文件夹 Users\<CurrentUser>\AppData\Local\Micro ...
- day12-SpringMVC文件上传
SpringMVC文件上传 1.基本介绍 SpringMVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.spring 用 Jacarta Com ...
- aspnetcore 原生 DI 实现基于 key 的服务获取
你可能想通过一个字符串或者其他的类型来获取一个具体的服务实现,那么在 aspnetcore 原生的 MSDI 中,如何实现呢?本文将介绍如何通过自定义工厂来实现. 我们现在恰好有基于 Json 和 M ...
- 以docker方式部署的redis键值查询及清理
1.首先使用 docker ps 命令来查看正在运行的容器.该命令会列出容器的ID.名称.端口号.状态等信息.也可以使用 docker ps -a 命令来查看所有容器,包括已经停止的容器. docke ...
- JZOJ 7392. 【2021.11.17NOIP提高组联考】数 (ds)
\(\text{Problem}\) 元素带类型与权值,每次修改权值或类型,求区间每种类型和的 \(k\) 次方和 强制在线 \(\text{Solution}\) 显然简单分块,根据询问需要发现要 ...
- 好用的liunx可视化管理工具
官网: https://www.terminal.icu/ 本地连接需要点击软件右上角切换线路到本地连接
- 2014-12-2 Z字形扫描
问题描述 试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zi ...