public class Student {
String name;
double score;
public void test(Student this){
System.out.println(this);
}
public void printPass(double score){
if(this.score >= score){
System.out.println("恭喜您,您成功考入了哈佛大学~~");
}else {
System.out.println("很遗憾,您没有考过~~");
}
}
}
这个this.score和score就避免了重名。
public class Student {
String name;
double score;
// 无参数构造器
public Student() {
System.out.println("无参数构造器");
}
// 有参数构造器
public Student(String name, double score) {
this.name = name;
this.score = score;
}
}
Student s = new Student()
)package com.gmz;
public class Student {
public String name;
public double score;
public int grade;
public void printScore() {
System.out.println("Name: " + name);
System.out.println("Score: " + score);
System.out.println("Grade: " + grade);
}
}
这样不正确,我们的成员对象应该是不可见的,而是自定义set函数来设置、get函数来取:
public class Student {
private String name;
private double score;
private int grade;
public void setScore(int score){
if(score < 0 || score > 100){
System.out.println("Invalid score");
return;
}
this.score = score;
}
public double getScore(){
return score;
}
}
public class Student {
private String name;
private double score;
private int grade;
public Student() {
}
public Student(String name, double score, int grade) {
this.name = name;
this.score = score;
this.grade = grade;
}
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 int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
public class StudentOperator {
private Student student;
public StudentOperator(Student student){
this.student = student;
}
public void printPass(){
if(student.getScore() >= 60){
System.out.println(student.getName() + "学生成绩及格");
}else {
System.out.println(student.getName() + "学生成绩不及格");
}
}
}
package com.gmz.javabean
public class Student {
...
}
(相当于cpp中的include)
java.lang.String
(不需要导包)相当于cpp中的string//最简单的直接赋值
String str = "abc";
//构造器
String str = new String();
String rs2 = new String("itheima");
System.out.println(rs2);
char[] chars = {'a', '黑', '马'};
String rs3 = new String(chars);
System.out.println(rs3);
byte[] bytes = {97, 98, 99}
String rs4 = new String(bytes);
System.out.println(rs4);
public static void main(String[] args) {
System.out.println(new Object());
// 目标:快速熟悉String提供的处理字符串的常用方法。
String s = "黑马Java";
// 1、获取字符串的长度
System.out.println(s.length());
// 2、提取字符串中某个索引位置处的字符
char c = s.charAt(1);
System.out.println(c);
// 字符串的遍历
for (int i = 0; i < s.length(); i++) {
// i = 0 1 2 3 4 5
char ch = s.charAt(i);
System.out.println(ch);
}
System.out.println("-------------------");
// 3、把字符串转换成字符数组,再进行遍历
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
// 4、判断字符串内容,内容一样就返回true
String s1 = new String("黑马");
String s2 = new String("黑马");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
// 5、忽略大小写比较字符串内容
String c1 = "34AeFG";
String c2 = "34aEfg";
System.out.println(c1.equals(c2)); // false
System.out.println(c1.equalsIgnoreCase(c2)); // true
// 6、截取字符串内容 (包前不包后的)
String s3 = "Java是最好的编程语言之一";
String rs = s3.substring(0, 8);
// 7、从当前索引位置一直截取到字符串的末尾
String rs2 = s3.substring(5);
// 8、把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们
String info = "这个电影简直是个垃圾,垃圾电影!!";
String rs3 = info.replace("垃圾", "**");
// 9、判断字符串中是否包含某个关键字
String info2 = "Java是最好的编程语言之一,我爱Java,Java不爱我!";
System.out.println(info2.contains("Java"));
System.out.println(info2.contains("java"));
System.out.println(info2.contains("Java2"));
// 10、判断字符串是否以某个字符串开头。
String rs4 = "张三丰";
System.out.println(rs4.startsWith("张"));
System.out.println(rs4.startsWith("张三"));
System.out.println(rs4.startsWith("张三2"));
// 11、把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回给我们
String rs5 = "张无忌,周芷若,殷素素,赵敏";
String[] names = rs5.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
}
String使用时的注意事项(面试常考)
注意常量字符串会放在字符串常量池:
- 只要是以双引号给出的字符串对象,存储在常量池中,而且内容相同时只会存储一份(**节约内存)**,比如:
```cpp
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
```
输出true。
- new String创建字符串对象,每次new出来的都是一个新对象,放在堆内存中
```cpp
char[] chars = {'a', 'b', 'c'};
String a1 = new String(chars);
String a2 = new String(chars);
System.out.println(a1 == a2);
```
输出false。(地址不同)
- 易错题:
[外链图片转存中…(img-TUWu39Ng-1699718499323)]
ArrayList<String> list = new ArrayList<>();
new后面尖括号中的String省略不写从JDK 1.7开始支持;
这样就指定了ArrayList(范型类)中只能添加类型为String的元素,如果是:
ArrayList list = new ArrayList();
就可以添加各种类型的元素(最好不要)。
//1. 往末尾插入元素
list.add("黑马");
list.add(“jav”);
// 打印arrayList
System.out.println(list);
// 2、往集合中的某个索引位置处添加一个数据
list.add(1, "MySQL");
// 3、根据索引获取集合中某个索引位置处的值
String rs = list.get(1);
// 4、获取集合的大小(返回集合中存储的元素个数)
System.out.println(list.size());
// 5、根据索引删除集合中的某个元素值,会返回被删除的元素值给我们
System.out.println(list.remove(1));
// 6、直接删除某个元素值,删除成功会返回true,反之
System.out.println(list.remove("Java"));
// 默认删除的是第一次出现的这个黑马的数据的
System.out.println(list.remove("黑马"));
// 7、修改某个索引位置处的数据,修改后会返回原来的ArrayList给我们
System.out.println(list.set(1, "黑马程序员"));