Java学习总结:5
面向对象
对象数组
引用数据类型也可以定义数组
格式:
1.对象数组的动态初始化
类名称 对象数组名称 = new 类名称 [长度];
动态初始化默认情况下,数组的每一个元素都是其对应的默认值null。
class Book5{private String title;private double price;public Book5(String t,double p){title = t;price = p;}public String getInfo(){return "书名:"+title+"价格:"+price;}
}
public class Test1_1_6 {public static void main(String args[]){Book5 books[] = new Book5[3];//开辟了一个长度为3的对象数组,内容为nullbooks[0] = new Book5("java",79.8);books[1] = new Book5("jsp",69.8);books[2] = new Book5("android",89.8);for(int x=0;x<books.length;x++){System.out.println(books[x].getInfo());}}
}
2.对象数组静态初始化
类名称 对象数组名称 = new 类名称 [] {实例化对象,实例化对象,...};
class Book5{private String title;private double price;public Book5(String t,double p){title = t;price = p;}public String getInfo(){return "书名:"+title+"价格:"+price;}
}
public class Test1_1_6
{public static void main(String args[]){Book5 book[] = new Book5[]{new Book5("java",79.8),new Book5("jsp",69.8),new Book5("android",89.8),};for(int x=0;x<book.length;x++){System.out.println(book[x].getInfo());}}
}
String类的基本概念
String类的两种实例化方式:
1.直接赋值
public class Test1_1_7 {public static void main(String args[]){String str = "Hello";//直接赋值System.out.println(str);}
}
2.构造方法实例化
public String(String str)
public class Test1_1_7 {public static void main(String args[]){String str = new String("Hello");//使用关键字newSystem.out.println(str);}
}
字符串的比较
public class Test1_1_7 {public static void main(String args[]){String stra = "Hello";String strb = new String("Hello");String strc = strb;System.out.println(stra == strb);System.out.println(stra == strc);System.out.println(strb == strc);}
}
结果为:falsefalsetrue
我们发现,str1于str2虽然包含的内容是一样的,但是使用"=="比较时结果于我们预想的有差异,这是因为" == "在用于引用数据的比较时,比较的并不是内容,而是地址的数值内容,往往用在判断两个不同名的对象是否指向同一内存空间。
要比较字符串的内容,可以使用String类里面定义的方法
public boolean equals(String str);//区分大小写
public class Test1_1_7 {public static void main(String args[]){String stra = "Hello";String strb = new String("Hello");String strc = strb;System.out.println(stra.equals(strb));System.out.println(stra.equals(strc));System.out.println(strb.equals(strc));}
}
结果为:truetrue true
String类中"=="和"equals()"的区别
1." == "的主要功能是进行数值相等的判断,如果用在String对象上表示的是内存地址数值的比较。
2."equals()"是由String提供的一个方法,专门负责进行字符串内容的比较。
字符串常量就是String的匿名对象
String类的匿名对象是由系统自动生成的,不再由用户自己直接创建。
每一个字符串都是String类的匿名对象。
两种实例化方式的区别
1.直接赋值实例化
public class Test1_1_8 {public static void main(String args[]){String stra = "Hello";String strb = "Hello";String strc = "Hello";String strd = "World";System.out.println(stra == strb);System.out.println(stra == strc);System.out.println(strb == strc);System.out.println(stra == strd);}
}
结果: truetruetruefalse
可以看出直接赋值在相同内容的情况下不会开辟新的堆空间,而会直接指向自己已有的堆内存空间,从而实现堆内存空间的重用。
也就是说String类会自动将相同内容的对象进行引用传递操作,而不同内容的对象则会开辟新的堆内存空间。
2.构造方法实例化
String str = new String("Hello");
使用构造方法实例化会造成内存的浪费。
因为每一个字符串都是一个String的匿名对象,所以会首先在堆内存中开辟一块空间保存字符串"Hello",然后使用关键字new,开辟另一块堆内存空间,而之前定义的匿名对象的堆内存空间将会成为垃圾,等待被GC回收,所以原匿名对象的字符串不会再在对象池中。
所以使用构造方法开辟的字符串对象实际上会开辟两块空间,其中有一块空间将成为垃圾。
如果希望开辟的新内存数据也可以在对象池中保存,可以采用String类定义的一个手工入池操作。
定义语法如下:
public String intern();
public class Test1_1_9 {public static void main(String args[]){String stra = new String("Hello").intern();String strb = "Hello";System.out.println(stra==strb);}
}
字符串一旦定义则不可改变
public class Test1_1_1_1 {public static void main(String args[]){String str = "Hello";str = str + "World";str += "!!!";System.out.println(str);}
}
实际上在进行String类对象的内容修改时,原始的字符串都没有发生变化(最终没有引用的堆内存空间将成为垃圾空间),而改变的只是String类对象的引用关系。
所以得出结论:字符串一旦定义则不可改变。
String类的常用方法
字符与字符串
public class Test1_1_1_2 {public static void main(String args[]){String str = "hello";char c= str.charAt(0);System.out.println(c);}
}
charAt()方法的主要作用是从一个字符串中截取指定索引的字符,由于java中字符串的索引下标从0开始,所以截取的第一个字符为’h’。
public class Test1_1_1_3 {public static void main(String args[]){String str = "hello";char[]data = str.toCharArray();//将字符串变为字符数组for(int x=0;x<data.length;x++){System.out.print(data[x]+"、");}}
}
toCharArray()方法可以将一个字符串拆分为字符数组,而后拆分后的字符数组的长度就是字符串的长度。
public class Test1_1_1_4 {public static void main(String args[]){String str = "123456789";if(isNumber(str)){System.out.println("该字符串由数字组成");}else{System.out.println("该字符串由非数字组成");}}public static boolean isNumber(String temp){char[]data = temp.toCharArray();for (int x=0;x<data.length;x++){if(data[x]>'9'||data[x]<'0'){return false;}}return true;}
}
提示:针对boolean值的方法习惯性的命名是以"isXxx()"的形式命名。
字节与字符串
public class Test1_1_1_5 {public static void main(String args[]){String str = "helloworld";byte[]data = str.getBytes(); //将字符串变为字节数组for(int x=0;x<data.length;x++){data[x]-=32; //将小写字母变为大写形式}System.out.println(new String(data));System.out.println(new String(data,5,5));}
}
字符串的比较
public class Test1_1_1_6 {public static void main(String args[]){String stra = "hello";String strb = "hELLO";System.out.println(stra.equals(strb));System.out.println(stra.equalsIgnoreCase(strb));}
}
equalsIgnoreCase()方法不分大小写。
字符串的查找
public class Test1_1_1_7 {public static void main(String args[]){String str = "helloword";System.out.println(str.indexOf("world"));System.out.println(str.indexOf("l"));System.out.println(str.indexOf("l",5));System.out.println(str.lastIndexOf("l"));}
}
字符串的替换
public class Test1_1_1_8 {public static void main(String args[]){String str = "helloworld";String resultA = str.replaceAll("l","_");String resultB = str.replaceFirst("l","_");System.out.println(resultA);System.out.println(resultB);}
}
字符串的截取
public class Test1_1_1_9 {public static void main(String args[]){String str = "helloworld";String resultA = str.substring(5);//从指定索引截取到结尾String resultB = str.substring(0,5);//截取部分子字符串System.out.println(resultA);System.out.println(resultB);}
}
substring()方法传递的参数只能是正整数,不能是负数。
Java学习总结:5相关推荐
- 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方法很常用,用于切割 ...
最新文章
- Node.js开发环境的搭建
- python3读取excel数据-Python3读取和写入excel表格数据的示例代码
- 【Python-ML】SKlearn库L1正则化特征选择
- 博鳌论坛国际粮食安全-林裕豪:从玉农业对话丰收节贸易会
- CentOS忘记root密码解决办法
- 什么是Microsoft Teams的App Studio
- 革新以太网交换机架构 全光网络的风刮进园区
- dxf转nc代码软件_Window绝赞的6款软件,效率加班党必备,快到惊人!
- esc centos 安装mysql_CentOS7安装Mysql
- 181023词霸有道扇贝每日一句
- SecureCrt中文破解版直接下载使用免破解免安装并解决中文乱码问题
- 一篇数学建模优秀论文之简述
- java-数组-数组缩减
- 怎么用计算机看亲戚关系,小米亲戚计算器怎么用?如何利用小米计算器查询亲戚关系...
- 企业最大的危机是来自于内部
- flutter 设置全屏背景图(导航栏)
- Jenkins 打包项目出错汇总(持续)
- 矩阵的转置等于矩阵的逆
- 坑爹!攻城狮老爸被苹果解雇 只因女儿晒iPhone X!
- 2014年音视频即时通讯市场的割据