Java学习(API及Object类、String类、StringBuffer字符串缓冲区)
一、JAVA的API及Object类
1.API
概念:
Java 的API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。可以在其中查看相对应的类的源码。
我们在每次查看类中的方法时,都打开源代码进行查看,这种方式过于麻烦。其实,我们可以通过查帮助文档的方式,来了解Java提供的API如何使用。
通过帮助文档中类与方法的介绍,我们就能够使用这个类了。
2. Opject类
概念:Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。
2.1 equals方法
概念:
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。
在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。
子类:
package com.oracle.demo01; public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写equals代码,equals代码是从默认父类object继承的
public boolean equals(Object obj) {
//判断调用者和传进来的是否一致,一致的话就是自己跟自己比,直接输出true
if(obj==this){
return true;
}
if(obj instanceof Person){
Person p=(Person)obj;
return p.age==this.age;
}
return false;
}
}
测试类:
package com.oracle.demo01;
//equals方法:比较方法,返回true或者false
public class Test { public static void main(String[] args) {
Person p1=new Person();
p1.setAge(28);
Person p2=new Person();
p2.setAge(28);
//比较的是两个引用类型的地址
//如果你的preson没重写object的equals方法,那么你的p1.equals(p2)调用的是object的equals方法,比较
//的是两个对象的内存地址,地址每次 都是不同的,没有实用意义
//而我们的person如果比较的话,应该比较具体的属性值,如比较成员变量等,就要重写父类的equals方法
boolean b=p1.equals(p2);
System.out.println(b);
} }
注意:在复写Person中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,
在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。
2.2 toString方法
概念:
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。+
子类:
package com.oracle.demo01; public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} //重写 toString方法,用来返回属性值字符串。
public String toString() {
String str=this.name+"..."+this.age;
return str;
}
}
测试类:
package com.oracle.demo01;
//equals方法:比较方法,返回true或者false
public class Test { public static void main(String[] args) {
Person p1=new Person();
p1.setAge(28);
Person p2=new Person();
p2.setAge(28);
//调用重写后的方法,输出字符串而不是地址
Person p3=new Person();
String s1=p3.toString();
System.out.println(s1);
} }
二、String类
1.概述
String 类代表字符串;字符串是常量;
字符串本身不能改变,但str变量中记录的地址值是可以改变的。
字符串的本质是一个字符的数组。
package com.oracle.demo02; public class StringDemo { public static void main(String[] args) {
//Scanner sc=new Scanner(System.in);
//String 是免new的
//字符串是常量,不能被修改
String str="houyi";
//更换的不是字符串,而是str指向的地址
//str="cbengyaojin";
// 对象 对象
String str1=new String("houyi");
//equals 是比较的内容,不是地址 内容都是“houyi”,所以结果为true
System.out.println(str.equals(str1));
//比较的是地址 所以结果为false
System.out.println(str==str1);
} //因为String重写了equals方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断) }
str与str1创建方式有什么不同呢?
1.1 str创建,在内存中只有一个对象。这个对象在字符串常量池中
1.2 str1创建,在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
2.String 类构造方法
构造方法是用来完成String对象的创建,下图中给出了一部分构造方法需要在API中找到,并能够使用下列构造方法创建对象。
Byte:字节
一个字母是一个字节
实例:
package com.oracle.demo02; public class Demo01 {
public static void main(String[] args){
//电脑默认GBK编码,正数就是走ASCII表,65开始转成A,97开始转成a,以此类推.
//如果是负数,就是汉字
//byte 把字节(数字)转成了字符,然后数组就结合成了字符串
//byte[] 盛放数字
//char[] 盛放字符
//String构造方法是把数组,字符组等转换成字符串
byte[] bytes={-65,-66,-67,-68};
String str1=new String(bytes);
System.out.println(str1);
String str2=new String(bytes,1,2);
System.out.println(str2);
char[] chars={'d','o','g'};
String str3=new String(chars);
System.out.println(str3);
String str4=new String(chars,1,2);
System.out.println(str4);
String str5="chengyaojin";
String str6=new String(str5);
} }
3.String 类的方法查找
String类中有很多的常用的方法,我们在学习一个类的时候,不要盲目的把所有的方法尝试去使用一遍,这时我们应该根据这个对象的特点分析这个对象应该具备那些功能,这样大家应用起来更方便。
字符串的功能:
3.1 字符串中有多少个字符?(判断字符串的长度:用length()方法)
3.2 获取部分字符串
3.3 字符串是否以指定字符串开头。结尾同理
3.4 字符串中是否包含另一个字符串。
3.5 将字符串转成一个字符数组。或者字节数组。
3.6 判断两个字符串中的内容是否相同
3.7 获取该字符串对象中的内容
注意:直接打印引用类型变量时,默认调用该类型进行重写后的toString方法
实例:
package com.oracle.demo02;
//字符串功能
public class demo02 {
public static void main(String[] args){
//空格也算字符串长度,一个空格占一个字符串长度
String str="i love java,java love me";
int l=str.length();
System.out.println(l);
//substring 截取字符串
//传一个值代表从第六位数开始截取到最后
System.out.println(str.substring(6));
//传两个值时,从第三位开始截取到第六位,不包含第七位
System.out.println(str.substring(3,7));
//stratsWith("n") 判断字符串是否以n开头,输出true或false
System.out.println(str.startsWith("i"));
//endsWith("n") 判断字符串是否以n结尾,输出true或false
System.out.println(str.endsWith("java"));
//判断str字符串中是否包含love
System.out.println(str.contains("love"));
//获取“java”在字符串中第一次出现的索引,如果字符串中没有。则打印-1.
System.out.println(str.indexOf("java"));
//将字符串转成字节数组
byte[] bytes=str.getBytes();
for(int i=0;i<bytes.length;i++){
System.out.println(bytes[i]);
}
//将字符串转成字符数组
char[] chars=str.toCharArray();
for(int i=0;i<chars.length;i++){
System.out.println(chars[i]);
}
String str1="love";
String str2="LOVE";
//判断两个字符串内容是否相等
System.out.println(str1.equals(str2));
//判断两个字符串内容是否相等(忽略大小写) 可应用在判断验证码
System.out.println(str1.equalsIgnoreCase(str2)); }
}
三、字符串缓冲区
1.StringBuffer类
字符串缓冲区支持可变的字符串,StringBuffer就是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
2.StringBuffer的方法使用
注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己,所以说,StringBuffer它可以改变字符序列的长度和内容。
3.方法的链式调用
开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。这种时候,我们就可以把代码链在一起,如append方法一样。
4. StringBuilder类
StringBuilder类,它也是字符串缓冲区,此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。(但是StringBuffer更安全)
实例:
package com.oracle.demo02; public class demo03 { public static void main(String[] args) {
//StringBuffer 字符串缓冲区
StringBuffer sbu=new StringBuffer("wangzherongyao");
System.out.println(sbu);
//append 添加新的字符串
sbu.append("houyi");
System.out.println(sbu);
//可以快速添加,链式添加 sbu.append("wangzherongyao").append(123).append(2.3);
System.out.println(sbu);
//delete:字符串删除,从第三位开始删,删到第五位,不包括第六位
sbu.delete(3, 6);
System.out.println(sbu);
//insert(n,"sss"):从第三位开始,添加字符串sss
sbu.insert(3, "lanlingwang");
System.out.println(sbu);
//replace(0,2,"22222"):替换指定为的字符串 从0位开始,到1位的字符串将被替换,不包含2
sbu.replace(0, 2, "22299999");
System.out.println(sbu);
//reverse() 字符串反转
System.out.println(sbu.reverse());
} }
Java学习(API及Object类、String类、StringBuffer字符串缓冲区)的更多相关文章
- 常用API(Object、String、StringBuffer、用户登陆注册)
常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象 ...
- Java的API及Object类、String类、字符串缓冲区
Java 的API 1.1定义 API: Application(应用) Programming(程序) Interface(接口) Java API就是JDK中提供给开发者使用的类,这些类将底层的代 ...
- 代码块和Java的API及Object类
代码块 局部代码块 特点: 以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的 构造代码块 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作 ...
- java基础(15):常用API(Object、String、StringBuffer)
1. Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象的关系.接下来我们开始使用对象做事情,那么在使用对象做事情之前,我们要学习一些API中提供的常用 ...
- 常用类Object,String类详解
-------------------- String -----------------------1.求字符串长度 public int length()//返回该字符串的长度 String st ...
- Java第二次作业——数组和String类
Java第二次作业--数组和String类 学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别 ...
- Java面试炼金系列 (1) | 关于String类的常见面试题剖析
Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...
- C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;
ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口: 2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ...
- Java 常用类String类、StringBuffer类
常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...
随机推荐
- 框架----Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一.小试牛刀 1.创建Form类 from d ...
- 清除localstorage
h5本地存储localStorage,sessionStorage. localStorage是没有失效时间的,sessionStorage的声明周期是浏览器的生命周期. 当浏览器关闭时,sessio ...
- 「git」mac下git提交github代码
1.打开终端,输入 cd -/.ssh 这个是检查你的ssh的是否存在的,如果存在,先将已有的ssh备份,或者将新建的ssh生成到另外的目录下(如果第一次配置一般都是不存在的),不存在,你将会看到如下 ...
- HTTP、TCP、 UDP、 IP 、 Socket的关系
TCP和UDP协议是传输协议,IP是网络层协议.传输协议和网络层协议主要解决数据如何在网络中传输,或者说TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准.TCP负责发现传输 ...
- openstack日志模块
一.简单的python日志模块介绍 http://www.cnblogs.com/tuzkee/p/3974193.html http://blog.csdn.net/jgood/article/de ...
- C/C++预处理宏的总结
1.定义顺序的无关性 #define PI 3.14 #define TWO_PI 2*PI 这两句谁前谁后无所谓,因为预处理器不断迭代来实现宏替换,直到源文件中没有宏了才停止. 2. 宏变量变成字 ...
- vijos 1243 生产产品 DP + 单调队列优化
LINK 题意:有1个产品,m个步骤编号为1~m.步骤要在n个机器人的手中生产完成.其中,第i个步骤在第j个机器人手中的生产时间给定为$T[i][j]$,切换机器人消耗cost.步骤必须按顺序,同一个 ...
- 对 JavaScript 进行单元测试的工具
简介 单元测试关注的是验证一个模块或一段代码的执行效果是否和设计或预期一样.有些开发人员认为,编写测试用例浪费时间而宁愿去编写新的模块.然而,在处理大型应用程序时,单元测试实际上会节省时间:它能帮助您 ...
- [转]C语言指针详解(经典,非常详细)
博文地址:https://blog.csdn.net/constantin_/article/details/79575638 写得很好啊! 这里写一下笔记好了 int p; //这是一个普通的整型变 ...
- python3爬虫.3.下载网页图片
目标,豆瓣读书, 下载页面书籍图片. import urllib.request import re #使用正则表达式 def getJpg(date): jpgList = re.findall(r ...