API(应用程序编程接口)
包
包是分门别类管理各种不同的程序,类似于文件夹,建包有利于程序的管理和维护
建包的语法格式(idea会自动洗建包的代码):
package com.sangria.javabean;
public class Student{
}
在自己的程序中调用其他包下的程序的注意事项:
- 当前程序中,要调用自己所在包下的程序可以直接调用
- 当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问(导包格式:米import 包名.类名)
导包这一操作,idea是可以自动导包的:
File——settings——搜索框输入(auto)——找到Auto import——选中“Add unambiquous imports on the fly”——OK
- 当前程序中,要调用java提供的程序,要先导包才可以使用,但是java.lang包下的程序不需要导包,可以直接使用
- 当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问
String
概述
String代表字符串,可以用来创建对象封装字符串数据,并对其进行处理
String封装字符串数据的方式:
方式一:
直接使用双引号“...”
public class StringDemo{
public static void main(String[] args){//直接双引号得到字符串对象,封装字符串数据
String name = "Sangria";
System.out.printIn(name);
}
}
"Sangria"——>是对象,那print后得到的应该是他的地址,但是为什么最后输出的是name中的值?
字符串中本身
方式二:
new String类,调用构造器初始化字符串对象
public class StringDemo1{
public static void main(String[] args){
//new String创建字符串对象,并调用构造器初始化字符串
String rs = new String();
System.out.printIn(rs);
//输出空白
String rs1 = new String("sangira");
System.out.printIn(rs1);
//输出sangria
//以上两种方式在笔试题中可能出现,但是在实际开发中是不这样写的
char chars = {'a','b','c'};
String rs2 = new String(chars);
System.out.printIn(rs2);
byte[] bytes = {97,98,99};
String rs3 = new String(bytes);
System.out.printIn(rs3);
常用方法
String s1 = "天生我材必有用";
String s2 = "安得广厦千万间";
//1、length()输出字符串长度方法
System.out.printIn(s1.length());
//输出s1长度 7
//2、charAt()提取字符串某个索引位置的字符
Char c = s1.charAt(2);
System.out.printIn(c)
//输出为 我
//3、toCharArray()把字符串转换为字符串数组
char[] chars = s1.toCharArray()
for(int i=0;i<chars.length;i++){
System.out.printIn(chars[i]);
}
//4、比较两个字符串内容是否一样
System.out.printIn(s1.equals(s2)); //比较s1字符串和s2字符串是否一样
//也许会想到使用==去比较两个字符串内容是否一致 但是==比较的是两个字符串对象的地址 而非内容
//5、equalsIgnoreCase()比较两个字符串内容是否一样 忽略大小写
//6、substring(int beginIndex,int endIndex)给予起始位置和末位置的字符串截取(包含前面不含后面)
String s3 = s2.substring(0,3);
System.out.printIn(s3);
//输出 安得广厦
//7、substring(int endIndex);从开头到给予的末位置字符串截取
String s4 = s2.substring(4);
System.out.printIn(s4);
//输出 安得广厦千
//8、replace(CharSequence target,CharSequence replacement);替换指定的字符串
String s5 = s2.replace("千万","**");
System.out.printIn(s5);
//输出 安得广厦**间
//9、contains(CharSequence s);判断字符串是否包含指定的字符串
System.out.printIn(s2.contains("千万"));
//因为s2字符串中有 千万 这两个字 所以返回true
//10、startWith(String s);判断某个字符串是否以字符串s开头
System.out.printIn(s2.startWith("安"));
//s2字符串的确以 安 开头 所以返回true
//11、split()把字符串按照某个指定内容分割成多个字符串
String s6 = "张三,李四,王二麻子";
String[] rs1 = s6.split(",");
//分割结果: 张三 李四 王二麻子
使用时的注意事项
- String对象的内容不可改变,被称为不可变字符串对象
每次改变字符串对象实际上是产生了新的字符串对象,变量每次都指向了新的字符串对象,之前字符串对象的内容实际上是没有改变的,因此说String的对象是不可变的
- 只要是以"..."方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份
以该方式写出的字符串对象,相同的内容,他们指向的地址实际上是相同的
- 通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中
- 在运算中的话比如s2 = "我是";s3 = s2+"老师";s2==s3————>false 字符串运算就不放在常量池而是放在堆内存中(这里是变量名,所以编译优化不产生)
String s1 = "a"+"b"+"c";
String s2 = "abc";
s1==s2——————>true
虽说字符串运算会放在堆内存中,但是java存咋编译优化机制,程序在编译时,"a"+"b"+"c"会直接编译成"abc",以提升程序的执行性能(一眼看出来是具体值)
ArrayList
ArrayList是一个集合
集合:集合是一种容器,用来装数据,类似于数组
集合大小可变
ArrayList使用的最多最常见的集合
ArrayList快速入门
ArrayList<E>
public class ArrayListDemo{
public static void main(String[] args){
//创建一个ArrayList的集合对象
ArrayList list = new ArrayList();
//add(添加的东西); 将指定的元素添加到此集合的末尾
list.add("打底衫");
//此时该字符串就加入到了这个集合中
ArrayList<String> list1 = new ArrayList<>(); //加上<String>后该集合只能加字符串的数据
//add(int index,E element);在此集合中的指定位置插入指定的元素
list1.add("dsdad");
list1.add("嗲是多少");
//此时集合: ["dsdad","嗲是多少"]
list1.add(1,"mysql");
//此时集合变成: ["dsdad","mysql","嗲是多少"]
//get()返回指定索引处的元素
String s1 = list1.get(1);
System.out.printIn(s1);
//返回 mysql
//size()返回集合中元素的个数
System.out.printIn(s1.size());
//输出 3
//remove(int index);删除指定索引处的元素 返回被删除的元素
//remove(Object o);删除指定内容的元素,返回删除是否成功
//默认删除第一次出现和这个数据的元素
list1.remove("mysql");
System.out.printIn(list1);
此时返回: ["dsdad","嗲是多少"]
//set(int index,E element);修改指定索引处的元素
list1.set(0,"小鸭子");
System.out.printIn(list1);
//输出["小鸭子","嗲是多少"]
}
}