Java学习笔记(12)
eclipse使用的步骤:
1.选择工作目录。以后在Eclipse上面写的所有代码都是在工作目录上的
2.在Project Exploer窗口上新建一个工程,以后我们写代码都是以工程为单位的
3.在工程的src目录下右击,new一个class或者一个package
工程的目录介绍:
- settings:eclipse自动生成的配置文件,别碰它
- bin:用于存放所有的class文件
- src:用于存放所有的java源文件
- 运行java文件
- 导入工程
运行有三种方式:
- java的源代码右击——————>run as————————>java application
- 绿色箭头的右边向下箭头——————>run as————————>java application
- Ctrl+F11
使用eclipse的好处:
- ctrl+/ 内容补全
- 不需要你在使用javac工具编译,你在eclipse上面一旦保存,Eclipse自动编译
- 精准报错,自动修复(ctrl+1)
Object类是所有类的终极父类。任何一个类都继承了Object类
Object类:
常用的方法:
- toString()方法 返回该对象的字符串表示 返回的字符串表示:完整类名+@+对象的哈希码
- equals(Object obj)方法 用于比较两个对象的内存地址,判断两个对象是否为同一个对象
- hashcode()方法 返回该对象的哈希码值
疑问:toString()方法有什么作用?
查看源代码的方式:
方式一:按住ctrl键单击你需要看的源代码
方式二:把光标移动到你需要查看的代码处按下F3
这时候,我们就有了疑问,为什么要查看源代码呢?
- 查看源代码可以了解别人是如何写出这个技术的,让我们了解的更加的深入
- 吸收大牛的思想
看源代码最忌讳的一点:不要每行代码都弄懂是什么意思,能看个大概猜出他意思就足以
例题:改写toString方法
public class Demo1 { public static void main(String[] args) {
// TODO Auto-generated method stub
Demo1 d=new Demo1();
System.out.println("hashcode="+d.hashCode());
Object o=new Object();
System.out.println("toString:"+o.toString()); //toString:java.lang.Object@2c13da15
System.out.println(o);
Person p1=new Person(110,"狗娃");
System.out.println(p1);
Person p2=new Person(120,"狗蛋");
System.out.println(p2);
} }
class Person{
int id;
String name;
public Person() {}
public Person(int id,String name) {
this.id=id;
this.name=name;
}
public String toString() {
return "编号:"+this.id+"姓名:"+this.name;
}
} 结果:
hashcode=1361960727
toString:java.lang.Object@2c13da15
java.lang.Object@2c13da15
编号:110姓名:狗娃
编号:120姓名:狗蛋
经过这次例题,我们可以看出,重写toString之后,我们直接输出一个对象的时候,就会输出符合我们需求的格式数据
重写equals()方法
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Person p=(Person)obj;
return this.id==p.id;
} 结果:
p1与p2是同一个对象吗?true
java种的规范:一般我们重写了一个类的equals方法我们都会重写它的hashcode方法。
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.id;
} System.out.println("p1哈希码:"+p1.hashCode());
System.out.println("p2哈希码:"+p2.hashCode()); 结果:
p1哈希码:110
p2哈希码:110
这是因为比如equals方法返回为true,但是hashcode返回的值不一样,这就让人看起来很难受。
String 字符串类:
笔试题目:new String("abc")创建了几个对象
两个对象,一个对象是位于字符串常量中,一个对象是位于堆内存中。
使用equals方法的时候,我们一般都会将常量作为方法的调用者,这样避免空指针异常
test(null); public static void test(String str) {
if ("中国".equals(str)) {
System.out.println("回答正确");
}
else {
System.out.println("回答错误");
}
} 结果:
回答错误
String类的构造方法:
String() 创建一个空内容的字符串对象。
String str=new String();
String(byte[] bytes) 使用一个字节数组构建一个字符串对象
public static void main(String[] args) {
// TODO Auto-generated method stub
String str=new String();
byte[] buf= {97,98,99};
str=new String(buf);
System.out.println("字符串的内容是:"+str);
} 结果:
字符串的内容是:abc
String(byte[] bytes, int offset, int length)
bytes:要解码的数组
offset:指定从数组中哪个索引值开始解码。
length:要解码多少个字符
str=new String(buf,1,2);
System.out.println("字符串的内容是:"+str); 结果:
字符串的内容是:bc
String(char[] value) 使用一个字符数组构建一个字符串
String(char[] value, int offset, int count)
使用一个字符数组构建一个字符串,然后从给的的索引值开始,解码length个字符
char[] arr= {'明','天','会','更','好'};
str=new String(arr);
System.out.println("字符串的内容是:"+str); 结果:
字符串的内容是:明天会更好
String(int[] codePoints, int offset, int count)
int类型的索引
String(String original)
初始化一个新创建的String对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本
记住:使用字节数组或者字符数组都可以构建一个字符串对象。
获取方法:
int length 获取字符串的长度
char charAt(int index)获取特定位置的字符(角标越界)
int indexOf(String str)查找字串第一次出现的索引值,如果字串没有出现在字符串中,那么则返回-1表示。
int lastIndexOf(String str) 获取最后一个字符的位置,如果字串没有出现在字符串中,那么则返回-1表示。
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="abc中国ab中国";
System.out.println("字符串的字符个数:"+str.length());
System.out.println("根据索引值获取对应的字符:"+str.charAt(3));
System.out.println("查找字串第一次出现的索引值:"+str.indexOf("中国"));
System.out.println("查找字串第一次出现的索引值:"+str.lastIndexOf("中国"));
} 结果:
字符串的字符个数:9
根据索引值获取对应的字符:中
查找字串第一次出现的索引值:3
查找字串第一次出现的索引值:7
判断方法:
boolean endsWith(String str) 是否以指定字符串结束
boolean isEmpty() 是否长度为0
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString)忽略大小写是否相等
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="Demo.java";
System.out.println("是否以指定的字符串结束:"+str.endsWith("java"));
System.out.println("判断字符串是否为空内容:"+str.isEmpty());
System.out.println("判断字符串是否包含指定的内容"+str.contains("De"));
System.out.println("判断两个字符串的内容是否一致:"+"DEMO.JAVA".equals(str)); //区分大小写
System.out.println("判断两个字符串的内容是否一致(忽略大小写比较)"+"demo.java".equalsIgnoreCase(str));
} 结果:
是否以指定的字符串结束:true
判断字符串是否为空内容:false
判断字符串是否包含指定的内容true
判断两个字符串的内容是否一致:false
判断两个字符串的内容是否一致(忽略大小写比较)true
转换方法:
String (char【】 value) 将字符数组转换为字符串
String (char【】value,int offset,int count)
static String valueOf(char[] data)
static String valueOf(char[] data,int offst,int count)
char[] toCharArray() 将字符串转化为字符数组
byte[] getBytes()
字节数组,字符数组,字符串它们三者之间是可以互相转换的。
char[] buf=str.toCharArray(); //转换为字符数组
System.out.println("字符数组:"+Arrays.toString(buf));
byte[] buf2=str.getBytes();
System.out.println("字节数组:"+Arrays.toString(buf2)); 结果:
字符数组:[D, e, m, o, ., j, a, v, a]
字节数组:[68, 101, 109, 111, 46, 106, 97, 118, 97]
String replace(char oldChar,char newChar) 替换 也可以传两个字符串
String【】split(String regex)切割
String substring(int beginIndex) 截取字串
String substring(int beginIndex,int endIndex) 截取字符串
String toUpperCase() 转大写
String toLowerCase()转小写
String trim() 去除字符串首尾的空格
import java.util.*;
public class Demo6 { public static void main(String[] args) {
// TODO Auto-generated method stub
String str="今天晚上不考试";
System.out.println("指定新内容替换旧的内容:"+str.replace("不", "要"));
System.out.println("指定新内容替换旧的内容:"+str.replace("不", "要好好"));
str="大家-下-午-好";
String[] arr=str.split("-");
System.out.println("字符串数组:"+Arrays.toString(arr));
str="广州传智播客";
System.out.println("指定开始的索引值截取子串:"+str.substring(2));
System.out.println("指定开始和结束的索引值截取子串:"+str.substring(2,4));//包头不包尾 注意:截取的内容是包括开始的索引值,不包括结束的索引值,截取的位置是结束的位置-1位
str="abcde中国";
System.out.println("转大写:"+str.toUpperCase());
str="ASsdadaHGKda";
System.out.println("转小写:"+str.toLowerCase());
str=" 大家最近 都非常 努力 ";
System.out.println("去除字符串首尾的空格:"+str.trim());
} } 结果: 指定新内容替换旧的内容:今天晚上要考试
指定新内容替换旧的内容:今天晚上要好好考试
字符串数组:[大家, 下, 午, 好]
指定开始的索引值截取子串:传智播客
指定开始和结束的索引值截取子串:传智
转大写:ABCDE中国
转小写:assdadahgkda
去除字符串首尾的空格:大家最近 都非常 努力
例1:自己重写Tirm方法
public class Demo7 { public static void main(String[] args) {
// TODO Auto-generated method stub
String str=" 传智 播客 ";
System.out.println("字符串:"+str);
System.out.println("去除空格后的字串:"+myTirm(str));
}
public static String myTirm(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);
}
} 结果;
字符串: 传智 播客
去除空格后的字串:传智 播客
例2:从一串文件名中获取文件名称
public static void getFileName(String path) {
int index=path.lastIndexOf("\\");
String fileName=path.substring(index+1);
System.out.println("文件名:"+fileName);
} str="D:\\20120512\\day12\\Demo1.java";
getFileName(str); 结果:
文件名:Demo1.java
例3:将字符串对象中存储的字符反序
public static String reverse(String str) {
char[] arr=str.toCharArray();
char[] arr2=new char[arr.length];
int index=0;
for (int i=arr.length-1;i>=0;i--) {
arr2[index++]=arr[i];
}
String str2=new String(arr2);
return str2;
} str="新中国好";
System.out.println("倒置后的字符串:"+reverse(str)); 结果:
倒置后的字符串:好国中新
例4:统计子串出现的个数
public static void getCount(String str,String target) {
int count=0; //用于记录出现的次数
int fromIndex=0; //记录从哪个索引值开始寻找目标字串
while (str.indexOf(target, fromIndex)!=-1) {
//如果indexOf返回的不是-1,那么意味着找到了目标元素
fromIndex=str.indexOf(target, fromIndex);
count++;
fromIndex=fromIndex+target.length();
}
System.out.println("出现的次数:"+count);
} str="abcjavaabcjavajavaphpjava";
getCount(str,"java"); 结果:
出现的次数:4
字符串特点:字符串是常量,他们的值在创建之后不能更改
字符串的内容一旦发生变化,那么马上会创建一个新的对象
注意:字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。
如果需要频繁修改字符串的内容,建议使用字符串缓冲类(StringBuffer)。
StringBuffer 其实就是一个存储字符的容器。
添加数据:append();
StringBuffer底层是依赖了一个字符数组才能存储字符数据的,该字符串数组默认的初始容量是16,如果字符数组的长度不够使用时,自动增长一倍
容器应该具备的行为: 增删查改判断
Java学习笔记(12)的更多相关文章
- java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理
XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlA ...
- Java学习笔记12
循环 打印一个字符串(例如: "Welcome to Java!") 100次,就需要吧下面的输出语句重复写100遍,这是相当繁琐的: System.out.println(&qu ...
- Java学习笔记-12.传递和返回对象
1.Clone()方法产生一个object,使用方法后必须产生的object赋值. Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保护类型方法, ...
- Java学习笔记12(面向对象五:构造方法、this再探)
在开发中,经常需要在创建对象的同时明确对象对的属性值, 比如一个Person对象创建时候就应该有age和name等属性 那么如何做到在创建对象的同时给对象的属性初始化值呢? 这里介绍构造方法: 1.构 ...
- java学习笔记12(final ,static修饰符)
final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 20145330第八周《Java学习笔记》
20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...
- 20145330第七周《Java学习笔记》
20145330第七周<Java学习笔记> 第十三章 时间与日期 认识时间与日期 时间的度量 GMT(格林威治标准时间):现在不是标准时间 世界时(UT):1972年UTC出来之前,UT等 ...
- 20145330第六周《Java学习笔记》
20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...
随机推荐
- js获取链接参数
var url = location.search; var Request = new Object(); if(url.indexOf("?")!=-1){ var str = ...
- Linux I2C(一)之常用的几种实例化(i2c_client ) 【转】
转自:http://blog.csdn.net/lugandong/article/details/48092397 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 前言 方式 ...
- Jmeter===Jmeter中使用CSV Data Set Config参数化不重复数据执行N遍(转)
Jmeter中使用CSV Data Set Config参数化不重复数据执行N遍 要求: 今天要测试上千条数据,且每条数据要求执行多次,(模拟多用户多次抽奖) 1.用户id有175个,且没有任何排序规 ...
- openssl-0.9.8y
openssl-0.9.8y 支持 32位和64位 编译不报错和向上兼容和向下兼容. http://www.openssl.org/source/openssl-0.9.8y.tar.gz https ...
- leetcode 343. Integer Break(dp或数学推导)
Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...
- 快速排序算法的c++实现
很早以前看过快排算法觉得自己掌握了,,课今天用的时候发现老出错,认真想想发现自己一直搞错了... 下面先说一下我的想法: 首先,快排的思想就是 从数列中挑出一个元素,称为 "基准" ...
- 【POJ3254】coinfield
状压dp初步. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...
- 虚拟机 VMware Workstation12 安装OS X 系统
Windows下虚拟机安装Mac OS X —– VMware Workstation12安装Mac OS X 10.11 本文即将介绍WIN虚拟MAC的教程.完整详细教程(包含安装中的一些问题) ...
- POJ 2387 Til the Cows Come Home(dijkstra裸题)
题目链接:http://poj.org/problem?id=2387 题目大意:给你t条边(无向图),n个顶点,让你求点1到点n的最短距离. 解题思路:裸的dijsktra,注意判重边. 代码: # ...
- How To Install Nginx on Ubuntu 16.04 zz
Introduction Nginx is one of the most popular web servers in the world and is responsible for hostin ...