java基础--eclipse使用、object类、String类、stringbuffer类
eclipse使用的步骤
第一步: 选择工作目录。 以后在Eclipse上面写的所有代码都是在工作目录上的。
第二步: 在Project Exploer 窗口上创建一个工程,以后我们写代码都是以工程作为单位的。
新建工程的 步骤:
Project Exploer 窗口右击----------> New---------> java Project
第三步: 在工程的src目录下右击,new 一个Class就创建了一个类。
工程的目录介绍:
settings: elcipse自动生成的配置文件。 别碰它。
bin: 用于存放所有的class文件。
src: 用于存放所有的java源文件。
第四步: 运行java文件。
方式一: java的源代码右击-------->run as -----------> java application
方式二: 绿色箭头--------->run as -----------> java application
方式三: 快捷键的运行: ctrl+ f11
使用eclipse 好处
- ctrl + / 内部补全,只能提示。
- 不需要你再使用javac工具编译,你在Eclipse上面一旦保存,Eclipse自动编译。
- 精准报错,自动修复(ctrl+ 1)。
window—-》Reset Perspective 重置界面的窗口
Object类
Object类是所有类的终极父类。 任何一个类都继承了Object类。
Object类型的多态引用是会付出代价的
当你把对象装进ArrayList<Dog>时,它会被当做Dog来输入输出
ArrayList<Dog> myDogArraylist = new ArrayList<Dog>();
Dog dog1 = new Dog();
myDogArraylist.add(dog1);
Dog d = myDogArraylist.get(0);
但若你把它声明为ArrayList<Object>时会怎样?
ArrayList<Object> myDogArraylist = new ArrayList<Object>();
Dog dog1 = new Dog();
myDogArraylist.add(dog1);
// 下面的代码无法通过编译。get()方法会返回Object类型,编译期无法确认它是Dog
Dog d = myDogArraylist.get(0);
任何从ArrayList<Object>取出的东西都会被当做Object类型的引用而不管它原来是什么!
Object类常用的方法:
toString(); 返回该对象的字符串表示。 返回一个字符串用于描述该对象的。
疑问: toString() 有何作用?
重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格式数据。
equals(Object obj) 用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
hashCode() 返回该对象的哈希码值(大家可以把哈希码就 理解成是对象的内存地址)/
java中的规范:一般我们重写了一个类的equals方法,我们都会重写它的hashCode方法。
查看源代码的方式:
方式一: 按住ctrl键,单击你需要看的源代码.
方式二:把光标移动到你需要查看代码处按下F3.
class Person{
int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public Person() {
}
//目前我需要直接输出一个对象的时候,输出 的格式是: 编号:110 姓名: 狗娃 这种格式。 目前Object的
// toString方法无法满足子类的需求,那么这时候我们就应该对Object类的toString进行重写。
@Override
public String toString() {
return "编号:"+ this.id + " 姓名:"+this.name;
}
//为什么要重写:Object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合我现在的需求。
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id== p.id;
}
@Override
public int hashCode() {
return this.id;
}
}
public class Demo1 {
public static void main(String[] args) {
/*
Object o = new Object();
System.out.println(o.toString()); // java.lang.Object@18b3364 返回的字符串表示: 完整类名+@+ 对象的哈希码
System.out.println(o); // 通过查看源代码得知,直接输出一个对象 的时候,实际上在println方法内部会调用这个 调用的toString方法,把把toString方法返回的内容输出。
//疑问: 为什么直接输出一个对象的时候和输出对象的toString方法返回的字符串结果是一样的呢?
Person p1 = new Person(110,"狗娃");
System.out.println("p1:"+p1);
//如果我们能够输出一个p对象的时候,输出的格式: 编号:110 姓名: 狗娃..
Person p2 = new Person(112,"狗剩");
System.out.println("p2:"+p2);
*/
Person p1 = new Person(110,"狗娃");
Person p2 = new Person(110,"陈富贵");
//需求:在现实生活中只要两个人的身份证一致,那么就是同一个人。
System.out.println("p1与p2是同一个对象吗?"+ p1.equals(p2));
System.out.println("p1哈希码:"+ p1.hashCode());
System.out.println("p2哈希码:"+ p2.hashCode());
}
}
String类
笔试题目:new String(“abc”)创建了几个对象?
两个对象, 一个对象是 位于字符串常量池中,一个对象是位于堆内存中。
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println("str1==str2?"+(str1==str2)); // true
System.out.println("str2==str3?"+(str2==str3)); //false
System.out.println("str3==str4?"+(str3==str4)); // false
System.out.println("str3.equals(str2)?"+(str3.equals(str4))); //true
//是String类重写了Object的equals方法,比较的是两个字符串对象 的内容 是否一致。
// "=="用于比较 引用数据类型数据的时候比较的是两个对象 的内存地址,equals方法默认情况下比较也是两个对象 的内存地址。
String构造方法
String() 创建一个空内容 的字符串对象。
String(byte[] bytes) 使用一个字节数组构建一个字符串对象
String(byte[] bytes, int offset, int length)
bytes : 要解码的数组
offset: 指定从数组中那个索引值开始解码。
length: 要解码多个元素。
String(char[] value) 使用一个字符数组构建一个字符串。
String(char[] value, int offset, int count) 使用一个字符数组构建一个字符串, 指定开始的索引值,与使用字符个数。
String(int[] codePoints,int offset,int count)
String(String original)
记住: 使用字节数组或者字符数组都可以构建一个字符串对象。
String str = new String();
byte[] buf = {97,98,99};
str = new String(buf); //使用一个字节数组构建一个字符串对象
str = new String(buf,1,2); //使用一个字节数组构建一个字符串对象,指定开始解码 的索引值和解码的个数。
System.out.println("字符串的内容:"+str);//结果:字符串的内容:bc
char[] arr = {'明','天','是','圣','诞'};
str = new String(arr); //使用字符数组构建一个字符串
str = new String(arr,3,2);
System.out.println("字符串的内容:"+str);//字符串的内容:圣诞
int[] buf2 = {65,66,67};
str = new String(buf2,0,3);
System.out.println("字符串的内容:"+str);//字符串的内容:ABC
str = new String("abc");
System.out.println("字符串的内容:"+str);//字符串的内容:abc
使用常量.equals可以避免出现空指针异常的情况,建议这样使用
"中国".equals(str)
2.2 获取方法
int length() 获取字符串的长度
char charAt(int index) 获取特定位置的字符 (角标越界)
int indexOf(String str) 查找子串第一次出现的索引值,如果子串没有出现 在字符串中,那么则返回-1表示。
int lastIndexOf(String str) 查找子串最后一次出现的索引值 , 如果子串没有出现 在字符串中,那么则返回-1表示
2.3 判断方法
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0 如:“”,如果是null会报错。
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等
2.4 转换方法
char[] toCharArray() 将字符串转换为字符数组
byte[] getBytes();
字节数组与字符数组、字符串他们三者之间是可以互相转换。
其他方法
String replace(String oldChar, String newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex) 指定开始 的索引值截取子串
String substring(int beginIndex, int endIndex)指定开始 与结束的索引值截取子串,包头不包尾 注意:截取的内容是包括开始的索引值,不包括结束的索引值
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除字符串首尾的空格
//统计子串出现 的次数
public static void getCount(String str,String target){
int count = 0 ; //用于记录出现的次数
int fromIndex = 0; // 记录从那个索引值开始寻找目标子串
while((fromIndex = str.indexOf(target, fromIndex))!=-1){
//如果indexof方法返回 的不是-1,那么就是已经找到了目标 元素。
count++;
fromIndex = fromIndex+target.length();
}
System.out.println("出现的次数:"+ count);
}
//字符串反转
public static String reverse(String str){
char[] arr = str.toCharArray();
for(int startIndex = 0 , endIndex=arr.length-1 ; startIndex<endIndex; startIndex++,endIndex--){
char temp = arr[startIndex];
arr[startIndex] = arr[endIndex];
arr[endIndex] = temp;
}
//使用字符数组构建一个字符串。
return new String(arr);
}
// 需求1:自己实现trim的方法。
public static String myTrim(String str){
//先转换成字符 数组
char[] arr = str.toCharArray();
//定义两个 变量记录开始与结束 的索引值
int startIndex = 0 ;
int endIndex = arr.length -1;
//确定开始 的索引值
while(true){
if(arr[startIndex]==' '){
startIndex++;
}else{
break;
}
}
//确定结束 的索引值:
while(true){
if(arr[endIndex]==' '){
endIndex--;
}else{
break;
}
}
//截取子串返回
return str.substring(startIndex,endIndex+1);
}
stringbuffer类
字符串特点:字符串是常量;它们的值在创建之后不能更改.
字符串的内容一旦发生了变化,那么马上会创建一个新 的对象。
注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。
StringBuffer 其实就是一个存储字符 的容器。
使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
StringBuffer 底层是依赖了一个字符数组才能存储字符数据 的,该字符串数组默认 的初始容量是16, 如果字符数组的长度不够使用 时,自动增长1倍。eclipse
java基础--eclipse使用、object类、String类、stringbuffer类的更多相关文章
- Java基础知识强化09:String、StringBuffer和StringBuilder使用
1. 对于三者使用的总结: (1).如果要操作少量的数据用 = String (2).单线程操作字符串缓冲区下操作大量数据 = StringBuilder (3).多线程操 ...
- JAVA基础知识总结14(String、StringBuffer、StringBuilder)
1.String字符串: java中用String类进行描述.对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. 如何定义字符串对象呢? ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
- Java基础(三十四)String、StringBuffer类和数据缓冲区Buffer类
一.String类 1.创建字符串对象 创建字符串对象有两种方法:直接用“=”或者使用“new String(...)” String aStr = "TMZ"; String b ...
- Java基础扫盲系列(-)—— String中的format
Java基础扫盲系列(-)-- String中的format 以前大学学习C语言时,有函数printf,能够按照格式打印输出的内容.但是工作后使用Java,也没有遇到过格式打印的需求,今天遇到项目代码 ...
- java基础-Eclipse开发工具介绍
java基础-Eclipse开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 所谓工欲善其事必先利其器,即将身为一名Java开发工程师怎么能没有一款好使的IDE呢?今天就 ...
- Java基础-Eclipse第三方安装包管理工具之Maven
Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...
- Java基础教程(19)--Object类
Object类位于类结构树的最顶端,所有的类都是它的直接或间接子类,因此所有的类都继承了Object类的方法,我们可以在需要的时候覆盖这些方法.下面是一些将会在本文中讨论的Object类的方法: ...
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- java基础学习总结——Object类
一.Object类介绍
随机推荐
- devops 2024
What is DevOps? DevOps is a mindset, a culture, and a set of technical practices. It provides commun ...
- 如何开发 MCP 服务?保姆级教程!
最近这段时间有个 AI 相关的概念特别火,叫 MCP,全称模型上下文协议(Model Context Protocol).这是由 Anthropic 推出的一项开放标准,目标是为大型语言模型和 AI ...
- 多线程的waiting与notify
一.waiting()与notify() /* 进入到TimeWaiting(计时等待)有两种方式 1.使用sleep(long m)方法,在毫秒值结束之后,线程睡醒进入到Runnable/Block ...
- java基础之接口、多态
一.接口:是Java语言中一种引用类型[组数.类也是引用类型],内部主要就是封装了方法, 包括(抽象方法.默认方法.静态方法.私有方法) 格式: public interface 接口名称 { // ...
- Git的基础使用(一)
Git版本管理工具的作用: (1)完整的记录项目代码变化的过程 (2)备份每一个变化过程的代码版本 (3)多人协同开发 1.配置全局变量 (1)配置用户名 git config --global us ...
- LeetCode 热题 100
1. 两数之和 1. 两数之和 class Solution { public int[] twoSum(int[] nums, int target) { int n = nums.length; ...
- thinkphp 命令行执行导入
<?phpdeclare (strict_types=1);namespace app\command;use think\console\Command;use think\console\I ...
- 6.4K star!企业级流程引擎黑马,低代码开发竟能如此高效!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 AgileBPM 是一个基于Activiti7深度优化的企业级流程引擎开发平台,支持低代码. ...
- WPF 解决PasswordBox 属性Password无法绑定到后台的问题
在 WPF 中,你可以使用密码框的 Password 属性来绑定到后台,但是由于安全性考虑,WPF 的密码框不直接支持双向绑定.然而,你仍然可以通过其他方式实现将密码框的内容绑定到后台. 一种常见的方 ...
- 基于docker的AI-Codereview-Gitlab部署实战
AI-Codereview-Gitlab是一个基于大模型的自动化代码审查工具,帮助开发团队在代码合并或提交时,快速进行智能化的审查(Code Review),提升代码质量和开发效率. 主要功能 多模型 ...