一、类
定义:java中想要创建对象,必须先要有类的存在,类指的是一组相关属性和行为的集合。
类和对象的关系:java中需要根据类,创建对象,一个类,可以创建多个对象。
类的组成:包括成员变量和成员方法
public class Student {
String name= "张三"; //成员变量
public void study(){ //成员方法
System.out.println("学习 java");
}
}
格式:
①创建对象:
类名 对象名 = new 类名():Student st = new Student();
②变量的使用格式:
对象名.变量名:st.name
③方法的使用格式:
对象名.方法名(实际参数):st.study()
案例:定义一个手机类(Phone)
成员变量:(品牌 brand ,颜色 color ,价格 price)
方法变量:打电话(call)- 输出给某某打电话
发短信(sendMessage)- 输出群发短信
编写一个手机测试类(带有主方法的类叫测试类)(PhoneTest);
创建两个手机对象,并给属性赋值
1.小米,白色,4999
2.华为,黑色,6999
赋值后,校验自己有没有赋值成功,使用打印语句校验,调用两个对象各自的成员方法
创建类;
public class Phone {
String brand;
String color;
double price;
public void call(String name){
System.out.println("给" + name + "打电话!");
};
public void sendMessage(){
System.out.println("群发短信!");
};
public void sentOut(String band,String color,double price){
System.out.println(band + " ———— " + color + " ———— " + price);
}
}
创建测试类;
public static void main(String[] args) {
Phone ph1 = new Phone();
ph1.brand = "小米";
ph1.color = "白色";
ph1.price = 4999;
ph1.call("李磊");
ph1.sendMessage();
ph1.sentOut(ph1.brand,ph1.color,ph1.price);
System.out.println("-----------------------------------------");
Phone ph2 = new Phone();
ph2.brand = "华为";
ph2.color = "黑色";
ph2.price = 6999;
ph2.call("张天爱");
ph2.sendMessage();
ph2.sentOut(ph2.brand,ph2.color,ph2.price);
}
输出结果:
二、成员变量和局部变量的区别
三、this关键字
this 代表当前类对象的引用(地址)
例如:在类中的局部变量和成员变量出现重名的情况,java使用的是就近原则,如果我们现在想获取到成员变量,就需要在成员变量的前面加上this
public class Student{
String name;
public void getName(String name){
System.out.println(name);//局部变量
System.out.println(this.name);//成员变量
}
}
Student st = new Student();
st.name = "吹雪"
st.getName(“大朗”);
输出的答案是:大朗
吹雪
四、构造方法
构造方法概述:
①构造器:初始化一个新建的对象,构建、创造对象的时候,所调用的方法
②格式:方法名与类名相同,大小写也要一致;
没有返回值类型,连void都没有
没有具体的返回值(不能使用return)
③执行时机:
创建对象的时候调用,没创建一次对象,就会执行一次构造方法
不能手动调用构造方法
构造方法的作用:
本质作用:创建对象
结合构造方法的执行时机给对象中的属性(成员变量)进行初始化
构造方法的注意事项:
①构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数的构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
②构造方法的重载
构造方法也是方法,允许重载关系的出现
class Student{
public Student(){}
public Student(int age){}
}
③推荐的使用方式
无参数构造方法和带参数构造方法,都自己手动给出
五、封装
封装是使用类设计对象时将需要处理的数据以及处理这些数据的方法,设计到对象中
封装设计规范:合理隐藏,合理暴露
权限修饰符 :
private : 被修饰的成员变量或者成员方法只能在同一个类中访问
(default) : 是默认值,在成员变量或成员方法前面什么也不加的时候,默认被此修
饰,可以同一个类中和同一个包中访问
protected : 被修饰的成员变量或者成员方法可以在同一个类中, 同一个包中, 不同包
的子类之访问
public :被修饰的成员变量或者成员方法可以任意位置访问
实体类的使用场景:(JavaBean)
实体类是只负责数据的存取,而对数据的处理交给其他类来完成,以实现数据和数据业
务处理相分离
注意:在javaBean中成员变量需要进行私有化,通过要通过get和set方法向外暴露,例如下图
get和set的方法不需要手动填写,在idea 的 setting中添加插件ptg就可以快速的生成
在类中右键显示下面的菜单,点击Ptg to JavaBean就可以快速生成,包括构造器
案例:模仿电影信息系统
需求:展示系统中的全部电影(每部电影展示:名称、评分)。
允许用户根据电影编号(id)查找出某个电影的详细信息
电影信息类:MovieMessage
public class MovieMessage {
private int id;
private String title;
private String time;
private double score;
private String area;
private String type;
private String director;
private String starring;
//右键 Ptg to JavaBean
}
服务类:MovieService
public class MovieService {
Scanner scanner = new Scanner(System.in);
MovieMessage[] movies;
public MovieService(MovieMessage[] movies) {
this.movies = movies;
}
public void start(){
lo:
while (true){
System.out.println("----------电影信息系统----------");
System.out.println("请输入您的选择:");
System.out.println("1. 查询全部电影信息");
System.out.println("2. 根据id查询电影信息");
System.out.println("3. 退出");
int select = scanner.nextInt();
switch (select){
case 1:
getAllmovie();
break;
case 2:
queryMessage();
break;
case 3:
break lo;
default:
System.out.println("您的输入有误,请重新输入");
break;
}
}
}
/**
* 展示系统中全部的电影 (名称, 评分)
*/
private void getAllmovie(){
for(int i=0;i<this.movies.length;i++){
System.out.println(this.movies[i].getId() + "-----" + this.movies[i].getTitle() + "-----" + this.movies[i].getScore());
}
}
private void queryMessage(){
System.out.println("请输入您要查询的电影编号:");
int mid = scanner.nextInt();
for(int i=0;i<this.movies.length;i++){
MovieMessage movie = this.movies[i];
if(mid == this.movies[i].getId()){
System.out.println(movie.getId() + "---" + movie.getTitle() + "---" + movie.getTime()
+ "---" + movie.getScore() + "---" + movie.getArea() + "---"
+ movie.getType() + "---" + movie.getDirector() + "---" + movie.getStarring());
return;
}
}
// 代码要是走到这里, 说明没找到
System.out.println("您输入的编号不存在, 请检查!");
}
}
测试类:Main
public static void main(String[] args) {
MovieMessage movie1= new MovieMessage(1,"东八区的先生们","2022",2.1,"中国大陆","喜 剧","夏睿","张翰 王晓晨");
MovieMessage movie2= new MovieMessage(2,"上海堡垒","2019", 2.9, "中国大陆", "爱情 战争 科幻", "滕华涛", "鹿晗 舒淇");
MovieMessage movie3= new MovieMessage(3, "纯洁心灵·逐梦演艺圈", "2015", 2.2, "中国大陆", "剧情 喜剧", "毕志飞", "朱一文 李彦漫");
MovieMessage[] movies = {movie1,movie2,movie3};
MovieService service = new MovieService(movies);
service.start();
}