前言:面向对象介绍
- 面向:拿,找
- 对象:能干过的东西
- 面向对象编程:拿能干活的东西来做对应的事情
像Scanne和Random都是常用的对象
而我们要学习的是如何自己设计对象并使用(也就是不存在的对象)
1 类和对象
- 类(设计图):是对象共同特征的描述;
- 对象:是真实存在的具体东西。
- 类是用来描述一类事物的类,专业叫做:Javabean类。再Javabean类中,是不写main方法的
- 在以前,编写main方法的类,叫做测试类。我们可以在测试类中创建Javabean类的对象并进行赋值调用。
- 一个Java文件中可以定义多个class类,且只能一个是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中,建议一个文件定义一个类
在Java中必须先设计类才能获得对象。
如何定义类:
public class 类名 {
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动作)
3.构造器(后面学)
4.代码块
5.内部类}
//Phone代表一类事物
public class Phone {
//属性(成员变量)
String brand; //品牌
double price; //价格
//行为(方法,手机能干什么)
public void call(){
}
public void playGame(){
}
}
如何得到类的对象:
类名 对象名 = new 类名();
Phone p = new Phone();
案例:设计一个手机类,创建对象赋值并调用
2 封装(了解)
封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
- 思考:人画圆,画圆这个方法应该定义在人里还是圆里
- 答:圆里,圆提供半径等需要画圆的数据,所以要在圆中创建画圆的行为
- 思考:人关门时人关的门还是门关的门
- 答:门关的门,人给的作用力,门自己关的自己
封装的好处:让编程更简单,降低我们的学习成本
private(修饰符)关键字:
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问,让代码更加安全
定义一个女朋友类,变量用private修饰
在女朋友类中分别定义set和get方法,来赋值和取值
public class GrilFriendPrivate {
private String name;
private int age;
private String gender;
public void setAge(int a){
if(a>=18&&a<=50)
age = a;
else
System.out.println("非法数据");
}
public int getAge(){
return age;
}
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setGender(String g){
gender = g;
}
public String getGender(){
return gender;
}
用以下代码给上边的女朋友类赋值并调用
public class GrilFriendP {
public static void main(String[] args) {
GrilFriendPrivate g = new GrilFriendPrivate();
//定义了私有类,就必须用私有类定义的方法去赋值
g.setName("王开心");
g.setAge(18);
g.setGender("女");
//接下来调用类里的方法输出
// g.getName(); //单纯调用得不到值
// g.getAge();
// g.getGender();
System.out.println(g.getName());
System.out.println(g.getGender());
System.out.println(g.getAge());
}
- 引用全局变量
public class GF {
private int age;
public void method(){
int age = 10;
System.out.println(age); 10
System.out.println(this.age); 0
}
- 作用:在创建对象的时候给成员变量进行赋值的
- 特点:方法名与类名相同,大小写也要一致,没有返回值,连void都没有,没有具体的返回值(不可以用return带回数据就是用来赋初始值的)
- 如何执行:创建对象的时候由虚拟机调用,不能手动调用构造方法
- 每创建一次对象,就会调用一次构造方法
创建一个有参构造体,节省了再写setName等方法赋值的代码,节省时间
- 空参构造,如果我们不写,虚拟机自动创建(也是创建对象时默认调用,只不过默认空参里面啥都没有所以调用也啥都看不见,可以自己加)
- 如果程序运行就会默认调用空参构造体里的代码
public class Student {
private String name;
private int age;
//空参构造,如果我们不写,虚拟机自动创建
//如果程序运行就会默认调用空参构造体里的代码
public Student(){
System.out.println("看看我执行了吗");
}
//有参构造,自己创建的
public Student(String name , int age){
this.name = name;
this.age = age;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
}
赋值再调用:
ublic class StudentTest {
public static void main(String[] args) {
//创建对象
//第一个调用的空参构造,如果没写系统默认加一个
//1.Student s = new Student();
//2.直接赋初始值,调用有参构造
Student s = new Student("张三",23);
System.out.println(s.getAge());
System.out.println(s.getName());
}
}
- 类名需要见名知其意
- 成员变量使用private修饰
- 提供至少两种构造方法 1. 无参构造方法 2.带全部参数的构造方法
- 成员方法 1.提供一个成员变量对应的setXxx()/getXxx()
2.如果有其他行为也需要写上,比如学生学习
public class User {
//定义一个有用户名,密码,确认密码,邮箱,性别,年龄的页面
//1.写出私有化变量
private String username;
private String password;
private String email;
private String gender;
private int age;
//2.空参 构造提名与方法名完全相同
public User(){ }
//3.有参构造体 私有化变量有啥初始化啥 引用全局变量别忘了用this关键字
public User(String username,String password,String email,String gender,int age){
this.username = username;
this.password = password;
this.email = email;
this.gender = gender;
this.age = age;
}
//4.get和set方法 每个成员都需要提供两种基本的set和get方法
//因为时set所以不需要有返回值所以是void
//创建底下方法的快捷键:alt+intsert/alt+Fn+insert 熟练了可以用
public void setUsername(String username){
this.username = username;
}
//需要有返回值所以不可用void
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
public void setEmail(String email){
this.email = email;
}
public String getEmail(){
return email;
}
public void setGender(String gender){
this.gender = gender;
}
public String getGender(){
return gender;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
快捷键:alt+intsert/alt+Fn+insert
插件PTG 1秒生成标准Javabean
按下alt+intsert,选择Constructor,选择select None构建空参构造体
构建有参构造体同理,只需第二步把参数都选上点ok
创建set和get方法
选择Getter and Setter,然后在下一个对话框全选点ok
插件PTG 1秒生成标准Javabean
File–>settgins–>Plugings–>搜索ptg 安装即可
安装成功后在空白处单机右键,选择ptg to javabean 一键生成
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 类中,方法上(指形参)或方法里 |
初始化值不同 | 有默认值 | 无默认值,使用之前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随对象的创建而存在,随着对象的消失而消失 | 随着方法调用而存在,随方法结束而消失 |
作用域 | 整个类中有效 | 当前方法有效 |