Java学习总结:6
String类(接上篇)
字符串的拆分
public class Test1_1_2_1 {public static void main(String args[]){String str = "hello world";String result[] = str.split(" "); //以空格作为间隔for(int x=0;x<result.length;x++){System.out.print(result[x]+"、");}System.out.println();String result2[] = str.split(""); //字符串全部拆分for(int y=0;y<result2.length;y++){System.out.print(result2[y]+"、");}}
}
//结果: hello、world、
// h、e、l、l、o、 、w、o、r、l、d、
如果split()方法中设置的是一个空字符串,那么就表示全部拆分。
public class Test1_1_2_1 {public static void main(String args[]){System.out.println();String result3[] = str.split(" ",3);//拆分为指定个数for(int z=0;z<result3.length;z++){System.out.println(result3[z]);}}
}
//结果: hello
// world
// !!!
上面这个程序设置了拆分个数。
String类的其他方法
//去掉字符串左右空格
public class Test1_1_2_2 {public static void main(String args[]){String str = " hello world ";System.out.println(str.trim());}
}
trim()只能删除左右空格,无法删除中间空格。
为了删除字符串中间的空格,我们可以使用replaceAll()实现空格删除。
public class Test1_1_2_2 {public static void main(String args[]){String str = " hello world ";System.out.println(str.replaceAll(" ",""));}
}
//实现首字母大写的操作
public class Test1_1_2_3 {public static void main(String args[]){String str = "hello";System.out.println(initcap(str));}public static String initcap(String temp){return temp.substring(0,1).toUpperCase()+temp.substring(1);}
}
this关键字
在java中this可以完成三件事情:
1.调用本类属性
2.调用本类方法
3.表示当前对象
1.调用本类属性
class Book6 {private String title;private double price;public Book6(String title, double price) {title = title;price = price;}public String getTitle() {return "书名:" + title + ",价格:" + price;}
}
public class Test1_1_2_4 {public static void main(String args[]){Book6 book = new Book6("java开发",89.2);System.out.println(book.getTitle());}
}
结果:书名:null,价格:0.0
产生这样的结果的原因是,在java中的变量使用具备“就近使用”的原则,在构造方法中已经存在title和price变量名称,所以如果直接调用title或price变量将不会使用类中的属性,只会使用方法中的参数,所以此时Book类的构造方法是无法为title或price属性赋值的,如下:
在这种情况下为了可以明确地找到要访问的变量属于类中的属性,需要在变量前加上this,这样就可以准确地进行属性的标记。
class Book6 {private String title;private double price;public Book6(String title, double price) {this.title = title;//this属性表示的是本类属性,这样即使与方法中的参数重名也可以明确定位。this.price = price;}public String getTitle() {return "书名:" + title + ",价格:" + price;}
}
public class Test1_1_2_4 {public static void main(String args[]){Book6 book = new Book6("java开发",89.2);System.out.println(book.getTitle());}
}
调用本类方法
class Book7{private String title;private double price;public Book7(){System.out.println("一个新的Book7类对象产生");}public Book7(String title){this(); //调用本类无参构造方法this.title = title;}public Book7(String title,double price){this(title); //调用本类有参构造方法this.price = price; }public String getTitle(){return "书名:"+this.title+",价格:"+this.price;}
}
public class Test1_1_2_5 {public static void main(String args[]){Book7 book = new Book7("java开发",89.2);System.out.println(book.getTitle());}
}
在使用this调用构造方法时,存在两个重要限制:
1.使用this()调用构造方法形式的代码只能放在构造方法的首行;
2.进行构造方法互相调用时,一定要保留调用的出口(即避免出现构造方法递归调用造成死循环的错误)。
表示当前对象
class Book8{public void print(){System.out.println("this="+this);//this就是当前调用方法的对象}
}
public class Test1_1_2_6 {public static void main(String args[]){Book8 book1 = new Book8();System.out.println("book1="+book1);book1.print(); //此时book1为当前对象Book8 book2 = new Book8();System.out.println("book2="+book2);book2.print(); //此时book2为当前对象}
}
//结果: book1=Book8@34a245ab
// this=Book8@34a245ab
// book2=Book8@7cc355be
// this=Book8@7cc355be
引用传递
引用传递的核心意义:同一块堆内存空间可以被不同的栈内存所指向,不同的栈内存可以对同一堆内存进行内容的修改。
public class Test1_1_2_7 {public static void main(String args[]){String msg = "Hello";fun(msg);System.out.println(msg);}public static void fun(String temp){temp = "world";}
}
//结果:Hello
所有的变更都是在fun()方法中完成的,一旦fun()方法执行完毕temp将失效,其对应的内存也将变成垃圾。
对象比较
String类里面的equals()方法也属于对象比较操作。
class Book9{private String title;private double price;public Book9(String title,double price){this.title = title;this.price = price;}public String getTitle(){return this.title;}public double getPrice(){return this.price;}
}
public class Test1_1_2_8 {public static void main(String args[]){Book9 b1 = new Book9("java开发",79.8);Book9 b2 = new Book9("java开发",79.8);if(b1.getTitle().equals(b2.getTitle())&&b1.getPrice()==b2.getPrice()){System.out.println("是同一个对象");}else{System.out.println("不是同一个对象");}}
}
//结果:是同一个对象
class Book10{private String title;private double price;public Book10(String title,double price){this.title=title;this.price=price;}public boolean compare(Book10 book){if(book==null){return false;}if (this==book){ //内存地址相同return true;}if (this.title.equals(book.title)&&this.price==book.price){ //属性判断return true;}else{return false;}}
}
public class Test1_1_2_9 {public static void main(String args[]){Book10 b1=new Book10("Java开发",79.8);Book10 b2=new Book10("Java开发",79.8);if (b1.compare(b2)){ //对象比较System.out.println("是同一个对象");}else{System.out.println("不是同一个对象");}}
}
//结果:是同一个对象
通过上面的例子可以发现对象比较的操作有如下4个特点:
1.本类接收自己的引用,再与本类当前的对象(this)进行比较;
2.为了避免NullPointerException的产生,应该增加一个null的判断;
3.为了防止浪费性能的情况出现(要判断的属性会多),可以增加地址数值的判断,因为相同的对象地址相同;
4.进行属性的一次比较,如果属性全部相同,则返回true,否则返回false。
Java学习总结:6相关推荐
- Java学习路线图,如何学习Java事半功倍?
作为一个初学者想掌握Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确的告诉你学习这事本来 ...
- Java学习必不可少的网站,快收藏起来
java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学. Java学习必不可少的网 ...
- 分享五款java学习辅助工具,总有你用的上的~
想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...
- Java学习从入门到精通的学习建议
想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...
- java学习笔记11--Annotation
java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- JAVA学习资源网站
中文java技术网--http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)-- 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...
- 我的WEB之路(一)-2.JAVA学习路线
第一阶段:针对性夯实JAVA基础 课程名称 核心要点 完成目标 Java基础入门 搭建Java开发和运行环境等,IDE工具的学习和使用,Java语言基础,数据类型,运算符,条件和循环,数组使用等,Ja ...
- 准备写java学习笔记
准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267
- Java学习笔记--StringTokenizer的使用
2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...
最新文章
- C#基础知识整理:基础知识(10) 静态
- 新内容,新交互”全球视频云创新挑战
- 科幻电影系列-计算机技术
- java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
- [Leedcode][JAVA][第1431题][拥有糖果最多的孩子][暴力][六一儿童节]
- selenium IDE的基本命令
- ora-04098 触发器无效且未通过重新验证
- 台大李宏毅Machine Learning 2017Fall学习笔记 (4)Gradient Descent
- copy linux file to mac,Mac Linux互相传递文件
- Linux中vi/vim编辑器的常用命令
- 单元测试总结反思_考试后的总结与反思600字
- 求平方根java实现
- java每日一练(19_03_23)
- 全国计算机考试北京报名时间2015年,北京市2015年9月全国计算机等级考试报名时间...
- bootstrap黑色酷炫IT行业个人博客模板
- Kademlia详解 (转贴NeoRagex2002)
- 计算机一级 单元格尺寸设置,如何调整设置excel表格单元格大小一样大
- OnlyOffice官方Demo必要的修改及参数解释
- [转载]机器人工程师的漫漫长路
- 皮皮安学习Java第八天