面向对象

对象数组

引用数据类型也可以定义数组
格式:

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相关推荐

  1. Java学习路线图,如何学习Java事半功倍?

    作为一个初学者想掌握Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确的告诉你学习这事本来 ...

  2. Java学习必不可少的网站,快收藏起来

    java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学. Java学习必不可少的网 ...

  3. 分享五款java学习辅助工具,总有你用的上的~

    想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...

  4. Java学习从入门到精通的学习建议

    想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

  5. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  6. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  7. JAVA学习资源网站

    中文java技术网--http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)-- 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...

  8. 我的WEB之路(一)-2.JAVA学习路线

    第一阶段:针对性夯实JAVA基础 课程名称 核心要点 完成目标 Java基础入门 搭建Java开发和运行环境等,IDE工具的学习和使用,Java语言基础,数据类型,运算符,条件和循环,数组使用等,Ja ...

  9. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  10. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

最新文章

  1. Node.js开发环境的搭建
  2. python3读取excel数据-Python3读取和写入excel表格数据的示例代码
  3. 【Python-ML】SKlearn库L1正则化特征选择
  4. 博鳌论坛国际粮食安全-林裕豪:从玉农业对话丰收节贸易会
  5. CentOS忘记root密码解决办法
  6. 什么是Microsoft Teams的App Studio
  7. 革新以太网交换机架构 全光网络的风刮进园区
  8. dxf转nc代码软件_Window绝赞的6款软件,效率加班党必备,快到惊人!
  9. esc centos 安装mysql_CentOS7安装Mysql
  10. 181023词霸有道扇贝每日一句
  11. SecureCrt中文破解版直接下载使用免破解免安装并解决中文乱码问题
  12. 一篇数学建模优秀论文之简述
  13. java-数组-数组缩减
  14. 怎么用计算机看亲戚关系,小米亲戚计算器怎么用?如何利用小米计算器查询亲戚关系...
  15. 企业最大的危机是来自于内部
  16. flutter 设置全屏背景图(导航栏)
  17. Jenkins 打包项目出错汇总(持续)
  18. 矩阵的转置等于矩阵的逆
  19. 坑爹!攻城狮老爸被苹果解雇 只因女儿晒iPhone X!
  20. 2014年音视频即时通讯市场的割据

热门文章

  1. 设置IDEA编辑过程直接通过F5刷新网页就可以实时查看JSP文件更新结果,而非通过重新run
  2. Ubuntu 14.04 64bit上安装LNMP环境
  3. 读书:历史 -- 奥斯曼帝国六百年
  4. C++的STL 堆 实现获取数组堆第K大的数
  5. linux进程间通信:system V消息队列
  6. Mininet的介绍安装
  7. Buffer的工作方式
  8. lua创建文件和文件夹
  9. Jdk11,Jdk12的低延迟垃圾收集器ZGC
  10. Linux0.01内核根目录Makefile注释