面向对象详细讲解加习题

前言:面向对象介绍

  • 面向:拿,找
  • 对象:能干过的东西
  • 面向对象编程:拿能干活的东西来做对应的事情

像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());
    }

返回目录


3 this关键字:

  • 引用全局变量
public class GF {
    private int age;
    public void method(){
        int age = 10;
        System.out.println(age);         10
        System.out.println(this.age);     0
    }

返回目录


4 构造方法:

  • 作用:在创建对象的时候给成员变量进行赋值的
  • 特点:方法名与类名相同,大小写也要一致,没有返回值,连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());
    }
}

在这里插入图片描述
返回目录


5 标准JavaBean

  1. 类名需要见名知其意
  2. 成员变量使用private修饰
  3. 提供至少两种构造方法      1. 无参构造方法 2.带全部参数的构造方法
  4. 成员方法                           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 一键生成
在这里插入图片描述

返回目录


6 对象内存图(有图再放)


7 成员变量和局部变量的区别

区别成员变量局部变量
类中位置不同类中,方法外类中,方法上(指形参)或方法里
初始化值不同有默认值无默认值,使用之前需要完成赋值
内存位置不同堆内存栈内存
生命周期不同随对象的创建而存在,随着对象的消失而消失随着方法调用而存在,随方法结束而消失
作用域整个类中有效当前方法有效

返回目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值