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

  1. Java | Java常用API方法总结

    Java常用API方法总结 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Thr ...

  2. Java 常用API

    Java 常用API JFC(Java类库) 是系统提供的已实现的标准类的集合,是Java编程的API(Application Program Interface) 可帮助开发者方便.快捷地进行软件开 ...

  3. 7.Java常用API(String、ArrayList)

    API(Application Programming Interface, 应用程序编程接口) Java写好的技术(功能代码),可以直接调用 1.String String类定义的变量可以用于存储字 ...

  4. Java 常用API的运用,效率及技巧

    1.     Java面向对象基本概念 2.     System 3.     String, StringBuffer 4.     数值,字符,布尔对象与简单类型的操作 5.     Class ...

  5. Java --- 常用API

    常用API 方法重载: 方法名相同,方法接收的参数不同 static: 修饰的类,可以直接使用类名进行调用 方法名 说明 public static abs(int a) 返回参数的绝对值 publi ...

  6. JAVA常用API的笔记

    常用API 1.定义: 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来 2.String String 类代表字符串,Java 程序中的所有字符串文字(例如" ...

  7. 安卓逆向-盲狙加密方法 | 安卓/JAVA 常用API查询网站

    目标app-引力波 首先了解在java中进行md5加密会用到的方法,然后对方法进行hook盲狙 在https://tool.oschina.net/apidocs/apidoc?api=jdk-zh进 ...

  8. Java常用API——ArrayList

    PS:使用Ctrl+鼠标左键可以查看源码 用数组存储对象 创建Person类 package ArrayList_test;public class Person {private int age;p ...

  9. Java常用API(二)String

    String --- 代表字符串的类, 是一个最终类,不能被继承,没有子类.所有的字符串都是他的对象 . 字符串是一个常量,定义之后存储在运行时常量池中且只存储一份,定义好之后不可改变,一样字符串是被 ...

  10. java api 第一个类是_JAVA常用API:String 类的常用方法

    字符串是一个对象,有很多方法可以使用 1. length();返回字符串的长度 String str = "abcd"; int len = str.length(); 2. is ...

最新文章

  1. 第二章:二分和前缀和 【完结】
  2. AD 脚本kixtart运用之六(outlook邮件批量生成签名)
  3. Linux信号处理函数可中断么,linux中关于信号处理笔记(一)
  4. Node-SASS安装 scss
  5. java成组链接法的实现_c++磁盘存储空间的管理模拟(UNIX存储管理的成组链接法的设计与实现)...
  6. [转载] Python3入门精通基础教程(合集)
  7. [软件架构]基于PluginRT的插件编程
  8. Anchor-Free系列之CornerNet: Detecting Objects as Paired Keypoints
  9. 【转】小玄子和小桂子
  10. java数组初始化的方式,java中初始化数组的方式有几种
  11. MySQL NDB Cluster部署方案与实践
  12. 不可重复读和幻读的区别_论文重复率要多少算是合格的?
  13. dede 留言簿 多个
  14. 计算机音乐谱安娜的橱窗,《安娜的橱窗,钢琴谱》2,封茗囧菌(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
  15. C/C++ 留下的士兵
  16. 硬仗酒全线升级,新概念新玩法新风尚
  17. 设计一个按照时间片轮转法实现处理机调度的程序
  18. 游戏开发 入职6个月 牢骚型小结
  19. 推荐famfamfam.com上的免费WEB小图标
  20. 通用预约小程序,可广泛应用于医疗、政务、教育、培训、体育、金融、生活服务等行业领域,基于腾讯小程序云开发,无须服务器和域名

热门文章

  1. 【VScode】解决 VScode 命令行执行时报错:因为在此系统上禁止运行脚本
  2. 苦苦寻思 如何改掉抄袭代码的习惯?
  3. UVA 11090 - Going in Cycle!!(最短路`Bellman-Ford)
  4. 【计算机视觉】 完全基于opencv的双目景深与测距的实现
  5. 2013年薪水涨幅最高的10个行业
  6. AltiumDesignerSetup_16_1_11阿里云盘免费下载
  7. 项目经理:该版本性能测试工作由你全权负责,月底交付结果
  8. 学习周记(九)暨whaleCTFweb打卡练习第一期
  9. android 8.1 属性服务源码详解
  10. 爬取JD格力空调的各种信息