Java-常用 API(String、ArrayList)
常用 API(String、ArrayList)
› API(Application Programming Interface,应用程序编程接口)
● Java写好的技术(功能代码),可以直接调用.
● Oracle 也为Java提供了这些功能代码和相关的API文档(技术使用说明书).
▼ 下载API文档网址
http://www.oracle.com/technetwork/java/javase/downloads/index.html
---------------------------------------------------------------------------------
String 简单介绍
● String类定义的变量可以用于储存字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用.
> 关于 String 类学什么?
› String 定义变量储存字符串
◣需要知道如何创建字符串对象,并用String定义变量指向该字符串对象.
› String 的内存原理
◣字符串对象在内存中的原理是什么样.能够解决一些字符串的成绩面试题.
› String 类提供了哪些API
◣能够说出并使用String类提供的操作字符串的功能:遍历、替换、截取、相等、包含···
› String 解决实例
◣能够利用String的常用API去解决实际场景的业务需求,真正做到学以致用
◆ String 类概述
● Java.lang.String 类代表字符串,String类定义的变量可以变量可以用于指向字符串对象,然后操作该字符串.
● Java 查询中的所有字符串文字(例如:“abc”)都为此类的对象
> String 类的特点详解
● String起始常被称为不可改变字符串类型,它的对象在创建后不能被更改.
> String是不可变字符串的原因 :
● String变量每次的修改其实都是产生并指向了类的字符串.
● 原来的字符串对象都是没改变的,所以称不可变字符串.
◆ String 类创建对象的2种方式
> 方式一:总结使用 " " 定义.
String Word="文字";
> 方式二:通过String 类的构造器创建对象
构造器 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含如何内容 |
public String(String original) | 根据传入的字符内容,来创建字符串对象 |
public String(char[] chs) | 根据字符组的内容,来创建字符串对象 |
public String(byte chs) | 根据字节数组的内容,来创建字符串对象 |
public class StringDemo1 {public static void main(String[] args) {//方式一: 直接使用双引号得到字符串对象String Word="文字";System.out.println(Word);//方式二://1.public String(): 创建一个空白字符串对象,不含如何内容(几乎不用)String s1 = new String(); //s1 = ""System.out.println(s1);//2.public String(String): 根据传入的字符内容,来创建字符串对象(几乎不用)String s2 = new String("文字");System.out.println(s2);//3.public String(char[] c): 根据字符组的内容,来创建字符串对象char[] chars = {'a','b','中','国'};String s3 = new String(chars);System.out.println(s3);//4.public String(byte b): 根据字节数组的内容,来创建字符串对象byte[] bytes={97,98,99,65,66,67};String s4=new String(bytes);System.out.println(s4);}
}
◆ String 类创建面试题
> 有什么区别吗?(面试参考)
● 以 " " 方法给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份.
● 通过构造器new 对象,每new 一次都会产生一个新对象,放在堆内存中.
public class StringDemo1 {public static void main(String[] args) {String ss1 = "abc";String ss2 = "abc";System.out.println(ss1 == ss2);char[] char1 = {'a','b','c'};String ss3 = new String(char1);String ss4 = new String(char1);System.out.println(ss3 == ss4);}
}
◆ String 类常用API - 字符串内容比较
● 使用 ‘==’ 比较的的是地址 (比对基本数据类型)
● 使用 ‘equals’ 比较的的是内容 (比对引用数据类型)
● 使用 'equalsIgnoreCase ’ 忽略大小写进行比较的的是内容 (比对引用数据类型)
方法名 | 说明 |
---|---|
public bool equals (Object anObject) | 将次字符串与指定对象进行比较.只关心内容是否一致 |
public bool equalsIgnoreCase (String anotherString) | 将次字符串与指定对象进行比较.忽略大小写进行比较 |
import java.util.Scanner;
public class StringDemo2 {public static void main(String[] args) {//成员变量String Name = "用户";String Pwd = "123456";//接收值Scanner input = new Scanner(System.in);System.out.print("请输入用户名: ");String name = input.next();System.out.print("请输入密码: ");String pwd = input.next();//与成员变量比对接收值System.out.println("------此处使用的是 '==' 进行的比对-----");if(name == Name && pwd == Pwd){System.out.println("正确");}else {System.out.println("错误");}System.out.println("------此处使用的是 '.equals(比对值)' 进行的比对-----");if(name.equals(Name) && pwd.equals(Pwd)){System.out.println("正确");}else {System.out.println("错误");}}
}
◆ String 类常用API - 遍历、替换、截取、分隔操作
● 常用API
方法名 | 说明 |
---|---|
public int length() | 返回此字符串的长度 |
public char charAt(int index) | 获取某个索引位置的字符 |
public char[ ] toCharArray() | 将当前字符串转换成为字符数组返回 |
public String substring(int beginIndex, int endIndex) | 根据开始火绒结束索引进行截取,得到新的字符串(包前不包后) |
public String substring(int beginIndex) | 从传入的索引处截取,截取到末尾,得到新的字符串 |
public String replace(charSequence target,charSequence replacement) | 使用新值,将字符串的旧值替换,得到新的字符串 |
public String[ ] split(String regex) | 根据传入的规则切割字符串,得到字符串数组返回 |
public class StringAPIOtherDemo3 {public static void main(String[] args) {//1.public int length(): 获取字符串的长度String word = "我爱祖国Love";System.out.println(word.length());//2.public char charAt(int index): 获取某个索引位置处的字符char c=word.charAt(4);System.out.println(c);System.out.println("----------遍历字符串中的每个字符--------");for (int i=0; i<word.length(); i++) {char cr = word.charAt(i);System.out.println(cr);}//3.public char[ ] toCharArray(): 把字符串换成字符数组char[] ar=word.toCharArray();System.out.println();for (int i=0; i<ar.length; i++){char ch=ar[i];System.out.println(ch);}//4.public String substring(int beginIndex, int endIndex): 截取内容,包前不包后String name = "Java是世界最厉害的语言";String rs1 = name.substring(0,9);System.out.println(rs1);String rs2 = name.substring(5,10);System.out.println(rs2);//5.public String substring(int beginIndex): 从当前索引一直截取到末尾String rs3 = name.substring(4);System.out.println(rs3);//6.public String replace(charSequence target,charSequence replacement): 比对文字,并替换String name2 = "张三厉害,张三狂徒.";String rs4 = name2.replace("张三","**");System.out.println(rs4);//7.public Boolean contains(CharSequence s): 比对当前成员变量中是否存在该变量System.out.println(name2.contains("张三"));System.out.println(name2.contains("张三"));//8.public Boolean startsWithstand(String prefix): 比对是否为当前成员变量的开头System.out.println(name.startsWith("张三"));System.out.println(name.startsWith("张三厉害"));System.out.println(name.startsWith("张三棒棒"));//9.public String[ ] split(String s):搜索某个内容把字符串分割成字符串数组返回String name3 = "张三,李四,王五";String[] names = name3.split(",");for (int i=0; i<names.length; i++){System.out.println("选择了:"+names[i]);}}
}
◆ String 类实例
● 实现随机生成验证码
import java.util.Random;
/* 使用String完成随机5位数的验证码 */
public class StringCode {public static void main(String[] args) {//1.定义可取的字符范围String verification = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//2.利用 For 循环5次,每次循环从 verification 变量中随机取走一个字符Random random=new Random();String Code="";for (int i=0; i<5; i++){//按verification变量的长度随机生成一个数int index = random.nextInt(verification.length());//利用public char charAt(int index): 获取某个索引(index)位置处的字符char c = verification.charAt(index);//将获取到的随机值连起来通过Code接收Code += c;}System.out.println(Code);}
}
● 模拟用户登录
import java.util.Scanner;
/*模拟用户登录,3次重新登录机会*/
public class StringLogin {public static void main(String[] args) {//成员变量String Name = "用户";String Pwd = "123456";//接收用户输入信息Scanner input = new Scanner(System.in);for (int i=0; i<3;i++){System.out.print("请输入用户名: ");String name=input.next();System.out.print("请输入密码: ");String pwd=input.next();if (name.equals(Name)){if (pwd.equals(Pwd)){System.out.println("登录成功");break;}else {System.out.println("密码输入错误,请重新输入.你还有"+(2-i)+"机会");}}else {System.out.println("用户名错误,请重新输入,你还有"+(2-i)+"机会");}}}
}
● 手机号码屏蔽
import java.util.Scanner;
/* 接收号码,并替换号码 */
public class StringPhone {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print("请输入你的电话号码: ");String Phone=input.next();String s=Phone.substring(3,9);String Replace=Phone.replace(s,"******");System.out.println("你的电话为: "+Replace);}
}
---------------------------------------------------------------------------------
ArrayList 简单介绍
● ArrayList 代表的是集合类,集合是一种容器,不同的是集合的大小是不固定的.
● 通过ArrayList 的对象代表得到一个集合容器,同时ArrayList 提供了比数组更好用,更丰富的API(功能)给程序员使用.
> 关于 ArrayList 类学什么?
› ArrayList 集合如何创建对象
◣要知道如何利用ArrayList 创建对象代表集合容器来存放数据.
› ArrayList 常用API
◣能够说出并使用ArrayList 类提供的丰富的元素操作的功能:添加、获取、删除、修改等功能.
› ArrayList 存储自定义对象
◣能够使用ArrayList存储自定义的对象,并清楚ArrayList 集合存储对象的底层原理.
› ArrayList 解决实例
◣能够使用ArrayList 存储对象,并完成数据搜索,删除···创建业务需求.
◆ ArrayList 集合概述
● 数组的特点
数组定义完成并启动后,类型确定、长度固定.
数组适合用于数据个数和类型确定的场景
● 集合的特点
集合类型可以不固定,大小是可变
集合适合数据个数不确定,且要做增删改查元素的场景
◆ ArrayList 集合快速入门
● ArrayList集合
ArrayList是集合中的一种,它支持索引.
● ArrayList集合的对象获取
构造器 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
● ArrayList集合添加元素的方法
方法名 | 说明 |
---|---|
public Boolean add(E e) | 将指定的元素加到此集合的末尾 |
public void add(int index,E element) | 在此集合的指定位置插入指定的元素 |
------代码展示-------
import java.util.ArrayList;public class ArrayListDemo1 {public static void main(String[] args) {//1.创建ArrayList集合对象ArrayList list = new ArrayList();//2.添加数据list.add(120);list.add(9.8);list.add("Java");list.add('中');list.add("集合中可以添加各种类型的数据");System.out.println(list);//3.向指定位置添加数据list.add(1,"hollow");System.out.println(list);}
}
◆ ArrayList 对泛型的支持
● 泛型概述
ArrayList: 起始就是一个泛型类,可以在编译阶段约束集合只能操作某种数据类型.
● 案例
ArrayList: 此集合只能操作整数类型的元素
ArrayList: 此集合只能操作字符串类型的元素
※注意: 集合中只能存储引用类型,不支持基本数据类型
------代码展示-------
import java.util.ArrayList;
/* 目标: 能够使用ArrayList集合操作的数据类型 */
public class ArrayListDemo2 {public static void main(String[] args) {ArrayList<Object> listObject=new ArrayList<>(); //支持所有的类型listObject.add(120);listObject.add(9.8);listObject.add("Java");listObject.add('中');listObject.add("集合中可以添加各种类型的数据");ArrayList<String> listString1=new ArrayList<String>(); //只支持String类型ArrayList<String> listString2=new ArrayList<>(); //从JDK 1.7开始,泛型后面的类型声明可以不写//listString2.add(120);//listString2.add(9.8);listString2.add("Java");listString2.add("集合中只支持String类型的数据");ArrayList<Integer> listInteger=new ArrayList<>(); //只支持String类型listInteger.add(120);//listInteger.add(9.8);//listInteger.add("Java");}
}
◆ ArrayList 常用API - 遍历
● ArrayList集合常用方法
方法名称 | 说明 |
---|---|
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
------代码展示-------
import java.util.ArrayList;public class ArrayListDemo3 {public static void main(String[] args) {ArrayList<String> listString=new ArrayList<>();listString.add("Java");listString.add("Java");listString.add("MySQL");listString.add("HTML");listString.add("MyBatis");//1.public E get(int index): 获取某个索引位置处的元素值String e = listString.get(3);System.out.println(e);//2.public int size(): 获取集合的大小(元素个数)System.out.println(listString.size());//3.完成集合的遍历for (int i=0; i<listString.size(); i++){System.out.println(listString.get(i));}/* for (String s : listString) { System.out.println(s); } *///4.public E remove(int index): 删除指定索引处的元素,返回被删除的元素System.out.println(listString);String e2 = listString.remove(2);System.out.println(e2);System.out.println(listString);//5.public boolean remove(Object o): 直接删除元素值,删除成功返回true,删除失败返回falselistString.remove("Java");System.out.println(listString);//6.public E set(int index,E element): 修改指定索引处的元素,返回被修改的元素String e3 = listString.set(2,"MySql");System.out.println(e3);System.out.println(listString);}
}
◆ ArrayList 集合案例:遍历并删除元素
import java.util.ArrayList;
/* 目标:学习遍历删除元素的正确方案 */
public class ArratListDemo4 {public static void main(String[] args) {ArrayList<Integer> listInteger = new ArrayList<>();listInteger.add(79);listInteger.add(87);listInteger.add(100);listInteger.add(97);listInteger.add(73);listInteger.add(80);System.out.println(listInteger);for (int i=0; i<listInteger.size(); i++){int score = listInteger.get(i); //将索引值暂时存储在score中if (score>=80){System.out.println(score);}else {listInteger.remove(i);i--; //删除成功后,必须退一步,这样可以保证下次回到这个位置,如此不会跳过数据}}//重后面到这删除就可以for (int i = listInteger.size()-1; i >=0 ; i--) {int score = listInteger.get(i);if (score>=80){System.out.println(score);}else {listInteger.remove(i);}}}
}
◆ ArrayList 集合案例:存储自定义类型的对象
/* 电影类 */
public class Movie {//成员变量private String File;private double Score;private String Name;//构造public Movie() { }public Movie(String file, double score, String name) { File = file; Score = score; Name = name; }//封装public String getFile() { return File; }public void setFile(String file) { File = file; }public double getScore() { return Score; }public void setScore(double score) { Score = score; }public String getName() { return Name; }public void setName(String name) { Name = name; }
}
import cn.ObjectOriental.MoviesShow.Movie;
import java.util.ArrayList;
/*
方法1:需求:定义电影类(名称、分值、演员),创建三个电影对象,代表影片,插入集合中遍历"《长津湖》",9.8,"吴京""《我和我的父辈》",9.6,"吴京""《扑水少年》",9.5,"王川"*/
public class ArrayListDemo5 {public static void main(String[] args) {/*1.定义电影类Movie*//*2.创建3个电影对象*/Movie m1 = new Movie("《长津湖》",9.8,"吴京");Movie m2 = new Movie("《我和我的父辈》",9.6,"吴京");Movie m3 = new Movie("《扑水少年》",9.5,"王川");/*3.创建一个电影对象的ArrayList集合,并存储电影对象*/ArrayList<Movie> list = new ArrayList<>();list.add(m1);list.add(m2);list.add(m3);System.out.println(list); //此时list集合中存储的是指向电影对象的地址/*4.遍历电影类型的集合中的每一个对象.访问它的信息即可*/for (int i = 0; i < list.size(); i++) {Movie m = list.get(i); //定义对象来接它遍历对象的地址System.out.println("电影名称: "+m.getFile());System.out.println("电影评分: "+m.getScore());System.out.println("电影主演: "+m.getName());}}
}
import cn.ObjectOriental.MoviesShow.Movie;
import java.util.ArrayList;
/*
方法2:使用匿名对象需求:定义电影类(名称、分值、演员),创建三个电影对象,代表影片,插入集合中遍历"《长津湖》",9.8,"吴京""《我和我的父辈》",9.6,"吴京""《扑水少年》",9.5,"王川"*/
public class ArrayListDemo5 {public static void main(String[] args) {/*1.定义电影类Movie*//*2.创建3个电影对象*//*3.创建一个电影对象的ArrayList集合,并存储电影对象*/ArrayList<Movie> list = new ArrayList<>();list.add(new Movie("《长津湖》",9.8,"吴京"););list.add(new Movie("《我和我的父辈》",9.6,"吴京"););list.add(new Movie("《扑水少年》",9.5,"王川"););System.out.println(list); //此时list集合中存储的是指向电影对象的地址/*4.遍历电影类型的集合中的每一个对象.访问它的信息即可*/for (int i = 0; i < list.size(); i++) {Movie m = list.get(i); //定义对象来接它遍历对象的地址System.out.println("电影名称: "+m.getFile());System.out.println("电影评分: "+m.getScore());System.out.println("电影主演: "+m.getName());}}
}
◆ ArrayList 集合案例:元素搜索
public class Student {private String studyNumber; //学号private String name; //姓名private int age; //年龄private String className; //教室public Student() { }public Student(String studyNumber, String name, int age, String className) {this.studyNumber = studyNumber;this.name = name;this.age = age;this.className = className;}public String getStudyNumber() { return studyNumber; }public void setStudyNumber(String studyNumber) { this.studyNumber = studyNumber; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }public String getClassName() { return className; }public void setClassName(String className) { this.className = className; }
}
import java.util.ArrayList;
import java.util.Scanner;
/* 案例:学生信息系统,显示数据,并按照学号完成搜索学生类信息
* 测试数据:
* "BI035gEYy","一叶孤城",22,"推理一班"
* "wqA90HQpU","东方延绪",26,"中医学四班"
* "0uzRxJv6o","西门吹雪",24,"法医系三班"
* "bUQqiml3Z","东梅超风",21,"精神科五班"
* "Uo7Hbykpb","西方不败",27,"修理学二班" */
public class ArrayListStudent {public static void main(String[] args) {//1.创建学生类//2.创建学生对象封装学生对象//把学生对象添加到集合中去ArrayList<Student> liststudent = new ArrayList<>();liststudent.add(new Student("BI035gEYy","一叶孤城",22,"推理一班" ));liststudent.add(new Student("wqA90HQpU","东方延绪",26,"中医学四班"));liststudent.add(new Student("0uzRxJv6o","西门吹雪",24,"法医系三班"));liststudent.add(new Student("bUQqiml3Z","东梅超风",21,"精神科五班"));liststudent.add(new Student("Uo7Hbykpb","西方不败",27,"修理学二班"));//3.遍历变量集合中的每个信息并打印System.out.println("学号"+"\t\t\t"+"姓名: "+"\t\t"+"年龄: "+"\t"+"班级: ");for (int i = 0; i < liststudent.size(); i++) {Student s = liststudent.get(i);System.out.println(s.getStudyNumber()+"\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getClassName());}//4.定义方法按照学号查询学员信息Scanner input=new Scanner(System.in);while (true){System.out.print("请输入学号查询对象: ");String studyNumber = input.next();//5.调用方法查询Student s = getStudyId(liststudent,studyNumber);//6.判断s中是否存在学生地址if(s == null){System.out.println("对不起,查无此人( ̄▽ ̄)~*");}else {System.out.println("你查询的学生信息如下:");System.out.println("学号"+"\t\t\t"+"姓名: "+"\t\t"+"年龄: "+"\t"+"班级: ");System.out.println(s.getStudyNumber()+"\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getClassName()+"\n");}}}/* 根据学生的学号查询学生对象返回* @param students 存储全部学生对象的集合* @param studyNumber 搜索的学生对象的集合* @return 学生对象 | null* */public static Student getStudyId(ArrayList<Student> liststudent,String studyNumber){//1.遍历全部学生对象for (int i = 0; i < liststudent.size(); i++) {Student s = liststudent.get(i);//2.询问当前遍历的这个学生的学号:是否我们要找的学号if(s.getStudyNumber().equals(studyNumber)){//这个s代表的学生对象,就是我们要找的,返回它return s;}}//查无此人return null;}
}
Java-常用 API(String、ArrayList)相关推荐
- Java | Java常用API方法总结
Java常用API方法总结 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Thr ...
- Java 常用API
Java 常用API JFC(Java类库) 是系统提供的已实现的标准类的集合,是Java编程的API(Application Program Interface) 可帮助开发者方便.快捷地进行软件开 ...
- 7.Java常用API(String、ArrayList)
API(Application Programming Interface, 应用程序编程接口) Java写好的技术(功能代码),可以直接调用 1.String String类定义的变量可以用于存储字 ...
- Java 常用API的运用,效率及技巧
1. Java面向对象基本概念 2. System 3. String, StringBuffer 4. 数值,字符,布尔对象与简单类型的操作 5. Class ...
- Java --- 常用API
常用API 方法重载: 方法名相同,方法接收的参数不同 static: 修饰的类,可以直接使用类名进行调用 方法名 说明 public static abs(int a) 返回参数的绝对值 publi ...
- JAVA常用API的笔记
常用API 1.定义: 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来 2.String String 类代表字符串,Java 程序中的所有字符串文字(例如" ...
- 安卓逆向-盲狙加密方法 | 安卓/JAVA 常用API查询网站
目标app-引力波 首先了解在java中进行md5加密会用到的方法,然后对方法进行hook盲狙 在https://tool.oschina.net/apidocs/apidoc?api=jdk-zh进 ...
- Java常用API——ArrayList
PS:使用Ctrl+鼠标左键可以查看源码 用数组存储对象 创建Person类 package ArrayList_test;public class Person {private int age;p ...
- Java常用API(二)String
String --- 代表字符串的类, 是一个最终类,不能被继承,没有子类.所有的字符串都是他的对象 . 字符串是一个常量,定义之后存储在运行时常量池中且只存储一份,定义好之后不可改变,一样字符串是被 ...
- java api 第一个类是_JAVA常用API:String 类的常用方法
字符串是一个对象,有很多方法可以使用 1. length();返回字符串的长度 String str = "abcd"; int len = str.length(); 2. is ...
最新文章
- 第二章:二分和前缀和 【完结】
- AD 脚本kixtart运用之六(outlook邮件批量生成签名)
- Linux信号处理函数可中断么,linux中关于信号处理笔记(一)
- Node-SASS安装 scss
- java成组链接法的实现_c++磁盘存储空间的管理模拟(UNIX存储管理的成组链接法的设计与实现)...
- [转载] Python3入门精通基础教程(合集)
- [软件架构]基于PluginRT的插件编程
- Anchor-Free系列之CornerNet: Detecting Objects as Paired Keypoints
- 【转】小玄子和小桂子
- java数组初始化的方式,java中初始化数组的方式有几种
- MySQL NDB Cluster部署方案与实践
- 不可重复读和幻读的区别_论文重复率要多少算是合格的?
- dede 留言簿 多个
- 计算机音乐谱安娜的橱窗,《安娜的橱窗,钢琴谱》2,封茗囧菌(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
- C/C++ 留下的士兵
- 硬仗酒全线升级,新概念新玩法新风尚
- 设计一个按照时间片轮转法实现处理机调度的程序
- 游戏开发 入职6个月 牢骚型小结
- 推荐famfamfam.com上的免费WEB小图标
- 通用预约小程序,可广泛应用于医疗、政务、教育、培训、体育、金融、生活服务等行业领域,基于腾讯小程序云开发,无须服务器和域名
热门文章
- 【VScode】解决 VScode 命令行执行时报错:因为在此系统上禁止运行脚本
- 苦苦寻思 如何改掉抄袭代码的习惯?
- UVA 11090 - Going in Cycle!!(最短路`Bellman-Ford)
- 【计算机视觉】 完全基于opencv的双目景深与测距的实现
- 2013年薪水涨幅最高的10个行业
- AltiumDesignerSetup_16_1_11阿里云盘免费下载
- 项目经理:该版本性能测试工作由你全权负责,月底交付结果
- 学习周记(九)暨whaleCTFweb打卡练习第一期
- android 8.1 属性服务源码详解
- 爬取JD格力空调的各种信息