一.面向对象(续)
三大特征:封装,继承,多态。
封装
封装原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
一般会把成员变量使用private(私有,隐藏)关键字修饰(private修饰的成员只能在当前类中访问)
并为每个成员变量提供配套public修饰的getter,setter方法暴露其取值和赋值。
public class Student{
private int age; //成员变量用private修饰
//提供成套的getter和setter方法
public void setAge(int age){
if(age>=0&&age<=200){
this.age=age;
}else{
System.out.println("您的年龄数据有误!");
}
}
public int getAge(){
return age;
}
}
public class Test{
public static void main(String[]args){
Student s=new Student();
s.setAge(-23);
System.out.println(s.getAge()); //您的年龄数据有误!
}
}
JavaBean
也可以称为实体类,其对象可以用于在程序中封装数据。
标准JavaBean书写要求:
①成员变量要求使用private修饰
②提供成员变量对应的setXxx()/getXxx()方法
③必须提供一个无参构造器,有参构造器可写可不写
成员变量和局部变量的区别
成员变量和局部变量的区别 | ||
区别 | 成员变量 | 局部变量 |
类中位置不同 | 类中,方法除外 | 常见于方法中 |
初始化值不同 | 有默认值 | 无默认值,使用前需先赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的创建而存在,随着方法的消失而消失 |
作用域 | 在所属的大括号中 |
二.String类
什么是String类
String 类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,可以直接使用。
String常被称为不可变字符串类型
原因:String变量每次的修改其实是都产生并指向新的字符串对象。原本的字符串对象是没有改变的。
public static void main(String[]args){
String name="新年";
name+="快乐啊" ;
System.out.println(name); //新年快乐啊
}
创建字符串对象的两种方式
①直接用:""定义
String name="新年快乐啊";
②通过构造器来创建对象
String(); | 创建一个空字符串 |
String(String); | 创建一个字符串 |
String(char[]c); | 根据数组内容,来创建字符串对象 |
String(byte[]b); | 根据字节数组的内容,来创建字符串对象 |
三.集合
什么是集合
集合和数组类似,也是一种容器,用于装数据的。
特点:
①集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
②集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
③集合提供了许多丰富的功能,而数组功能单一。
ArrayList集合(支持索引)
添加元素的方法
方法名 | 说明 |
public boolean add(E e); | 将指定的元素追加到集合的末尾 |
public void add (int index,E element); | 在此集合中的指定位置插入指定元素 |
public static void main(String[] args){
//创建ArrayList集合的对象
ArrayList list=new ArrayList();
//添加数据
list.add("新年");
list.add("快乐");
System.out.println(list,add("啊")); //添加成功返回true
System.out.println(list); //新年快乐啊
//插入指定位置
list.add(index:2.element:"真");
System,out.println(list); //新年真快乐啊
}
泛型
在编译阶段约束集合对象只能操作某种数据类型
ArrayList<String>
此集合只能操作字符串类型的元素
ArrayList<Integer>
此集合只能操作整数类型的元素
注意:集合中只能存储引用类型,不支持基本数据类型
集合的遍历
public static void main(String[] args){
ArrayList <Integer>scores=new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
System.out.println(scores);
//将低于80分的成绩从集合中去掉
//错误示例
for(int i=0;i<scores.size();i++){
int score=scores.get(i);
if(score<80){
scores.remove(i);
}
}
System.out.println(scores); //98,66,89
//解决方案1
for(int i=0;i<scores.size();i++){
int score=scores.get(i);
if(score<80){
scores.remove(i);
i--;
}
}
System.out.println(scores); //98,89
//解决方案2
for(int i=scores.size()-1;i>=0;i--){
int score=scores.get(i);
if(score<80){
scores.remove(i);
}
}
System.out.println(scores); //98,89