一:JAVA开发步骤
二:Java基本语法
三:Java基础知识
四:程序流程控制
五:数组
六:方法的相关知识
八:面向对象
九:String字符串
十:没有十
十一:Static静态关键字
九:String字符串
常用API:包括String
1.概述
对象在创建后不可变,是指:它会指向新的对象但他原来的对象不会变。
2.创建字符串对象
法二的意思是:给的是字符数组,经过构造器变成字符串。
例:
上面讲的创建字符串对象的两种方式有什么区别?
原因:
3.常见面试题
例一:
例二:
s1里的abc是在字符串常量池里面,s3的abc是在堆内存里面,所以flase.
例三:
因为a,b,c不是变量,这里代表着常量。
4.String类常用API
为什么要用API?
例:
因为okname的地址在常量池,name的地址在堆内存,故二者无法比较。为解决此类地址问题,引入API
解决方法:
常用API
5.String案例(API)
例一:开发验证码
核心:输出字符串对象中某一位置的字符的API
ku.charAt(location)
即:自己创建字符串对象,在创建的内容里随机取5个
package practice;
import java.util.Random;
public class practicedemo8 {
//目标: 在自己建的字符串对象里面随机取5个字母
public static void main(String[] args) {
String ku="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 01234......
String total="";
Random sc=new Random();
for (int i = 0; i < 5; i++) {
int location=sc.nextInt(ku.length()); //注意:随机抽到5,表示f
System.out.println(location);
char a =ku.charAt(location);
total+=a;
}
System.out.println(total);
}
}
例二:开发用户登录功能
核心:字符串比较API
okadmin.equals(admin)
package practice;
import java.util.Scanner;
public class practicedemo9 {
//目标: 实现用户登入功能
public static void main(String[] args) {
String okloginname="chenna";
String okadmin="123456";
Scanner sc=new Scanner(System.in);
//有三次输入机会
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String loginname=sc.next(); //注意不要打成sc.nextInt
System.out.println("请输入密码:");
String admin=sc.next();
if(okloginname.equals(loginname)){
if(okadmin.equals(admin)){ //注意:不能写成okadmin==admin,因为一个放在堆内存的字符串常量池,一个放在堆内存
System.out.println("登入成功");
break; //跳出循环
}else { //打else if 和打else不一样,前者要带条件的
System.out.println("密码错误");
}
}else{
System.out.println("账号错误");
}
}
}
}
例三:实现屏蔽手机号中间四位
核心:从字符串对象中截取部分字符API
tel.substring(0,3)
package practice;
import java.util.Scanner;
public class practicedemo10 {
//目标:屏蔽手机号中间4位
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入您的手机号:");
String tel=sc.next(); //定义成Sting,是为了后面用API
String before=tel.substring(0,3); //表示0开始,3结束,包前不包后
String after=tel.substring(7); //表示从7开始到结束
System.out.println(before+"****"+after);
}
}
6.集合概述
集合和数组的区别:
7.ArrayList集合与其定义
注意:
System.out.println(list); 输出的是内容而非地址,因为里面涉及继承。
如何约定ArrayList里面只能存特定类型数据?
注意:标准模式是应该用泛型来定义集合的,这是约定俗成的。
8.ArrayList集合常用API
元素指的是单次输入的内容,不是一个字符。
例:
9.ArrayList集合的案例
例一:遍历并删除元素
package practice;
import java.util.ArrayList;
public class practicedemo11 {
//目标:遍历并删除元素
public static void main(String[] args) {
//1.定义集合,添加元素
ArrayList<Integer> scores=new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(79);
scores.add(50);
scores.add(100);
System.out.println(scores);
//2.法一:遍历,删除小于80的
for (int i = 0; i < scores.size(); i++) {
// int scorenum=scores.get(i); 表示把集合里面第i个元素提取出来
if(scores.get(i)<80){
scores.remove(i); //把集合里第i个去掉
i--; //i=1时,删去77,此时66会顶上来,如果没有i--,电脑会去直接拿i=2,即89.从而跳过66
}
}
/*3.法二:遍历,删除小于80的
for (int i = scores.size(); i >=0 ; i--) {
if(scores.get(i)<80){
scores.remove(i);
}
}
**/
System.out.println(scores);
}
}
注意:这类题,易出错。写了两种方法。
例二:显示影片信息
package practice;
import java.util.ArrayList;
public class practicedemo13 {
public static void main(String[] args) {
//1.先创建Movie类,来装电影信息
//5.从Movie类中回来,给Movie类创建对象
Movie m1=new Movie("肖申克的救赎",9,"canty"); //易错,注意内容直接填进()里
Movie m2=new Movie("妈妈的救赎",8,"danty");
Movie m3=new Movie("爸爸的救赎",7,"vanty");
//6.创建集合ArrayList,来存储上面的对象
ArrayList<Movie> mv=new ArrayList<>(); //易错,装的元素是一排信息,所以是Movie类
mv.add(m1); //易错,注意不是mv.add=(m1);
mv.add(m2);
mv.add(m3);
System.out.println(mv); //易错,此时输出的是元素m1,m2,m3的地址,因为它们是Movie类的对象;为了输出里面的内容要遍历
//7.遍历输出里面的内容
for (int i = 0; i < mv.size(); i++) {
Movie m=mv.get(i); //取出集合里的第0个元素的内容,这里装的是m1的地址,给m
System.out.println("片名:"+m.getName());
System.out.println("评分:"+m.getScore());
System.out.println("演员:"+m.getActor());
}
}
}
package practice;
public class Movie {
// 2.再定义变量,用private,使只在当前类中能访问
private String name;
private double score;
private String actor;
//3.建立构造器,简易方法:右键generate,constactor,即可得有参构造器;顺便复习内容,打一个无参的
public Movie (){
}
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
//4.用getter和setter. 使得可以从主函数取值和赋值。简易方法:右键generate,getter and setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
注意:很多易错点,仔细看。
最容易错的一点是,集合里面装的元素是Movie类的对象m1,m2,m3的地址所以直接打mv.sout,输出的是那三个地址
例三:数据搜索
package practice;
import java.util.ArrayList;
import java.util.Scanner;
public class practicedemo12 {
public static void main(String[] args) {
//1.定义一个Student类
//3.直接建立集合,往Student类里添加内容,并把地址给集合
ArrayList<Student> students=new ArrayList<>();
students.add(new Student("202201","陈1",21,"1801"));
students.add(new Student("202202","陈2",22,"1801"));
students.add(new Student("202203","陈3",23,"1801"));
students.add(new Student("202204","陈4",24,"1801"));
//4.输出所有学生信息
System.out.println("学生信息如下:");
for (int i = 0; i < students.size(); i++) {
Student m=students.get(i);
System.out.println(m.getStuNumber()+"\t"+m.getName()+"\t"+m.getAge()+"\t"+m.getClassNumber());
}
//5.输入想查找的学生的学号
Scanner sc=new Scanner(System.in);
//7.引用方法,因为不知道查几个人,所以要用一个死循环
while (true){
System.out.println("想查找的学生学号:");
String studyNumber=sc.next(); //易错,如果不把这句放在循环里面,会一直报查无此人,查无此人
Student v= returnmesage(students,studyNumber);
if(v==null){
System.out.println("查无此人");
}else {
System.out.println(v.getStuNumber()+"\t"+v.getName()+"\t"+v.getAge()+"\t"+v.getClassNumber());
}
}
}
///6.定义方法,输入学生学号即可查她的所有信息
public static Student returnmesage(ArrayList<Student> students,String studyNumber){
for (int i = 0; i < students.size(); i++) {
Student s=students.get(i);
if(s.getStuNumber().equals(studyNumber)){
return s; //易错,返回的应该是集合里的第i个元素,里面装着Student类的第i条信息的地址
}
}
//System.out.println("查无此人");
return null;
}
}
package practice;
public class Student {
//2.按常规操作定义
private String stuNumber;
private String name;
private int age;
private String classNumber;
public Student(String stuNumber, String name, int age, String classNumber) {
this.stuNumber = stuNumber;
this.name = name;
this.age = age;
this.classNumber = classNumber;
}
public String getStuNumber() {
return stuNumber;
}
public void setStuNumber(String stuNumber) {
this.stuNumber = stuNumber;
}
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 getClassNumber() {
return classNumber;
}
public void setClassNumber(String classNumber) {
this.classNumber = classNumber;
}
}
注意:
1.定义方法的时候,集合students的属性是ArrayList< Student> ;
2.用死循环的时候,把Scanner输入学号内置,不然一直出现 “查无此人”。
死循环快捷键:选中要设置成死循环的部分然后ctrl+alt+t,选择while即可
注释快捷键:
/**然后按回车键就会对方法遍历自动注释;
/*然后按回车键会自己生成多行注释,但内容要自己填。