【通俗易懂】Java进阶之面向对象封装与方法

方法

按照生命周期分为:
静态方法(类方法):
被static修饰普通方法就是静态方法。
非静态方法(实例方法):
没有被static修饰普通方法就是非静态方法。
备注:
1、所有的非静态方法通过该方法所在类的对象去调用/使用。
格式:
类名 对象名 = new 类名();
对象名.非静态方法名(实参);
2、所有静态方法通过该方法所在类的类名去调用/使用。
格式:
类名.静态方法名(实参);
在这里插入图片描述

package com.wlx.day05;

public class MethodDemo
{
    /**
     * 声明无参数的非静态方法/实例方法
     */
    void demo()
    {
        System.out.println("demo()---");
    }

    /**
     * 声明有一个String类型参数的非静态方法/实例方法
     * @param s
     */
    void  method(String s)
    {
        demo();
    }

    /**
     * 定义有一个int类型参数的静态方法
     * @param a  形参
     */
    static void demo1(int  a)
    {
        System.out.println("a = "+a);
    }




    public static void main(String[] args)
    {
        //创建MethodDemo这个类的实例对象
        MethodDemo  md = new MethodDemo();
        //定义一个int类型的变量b,并为其初始化
        int  b = 123;
        demo1(b);//此处的变量b被称为实参---实际的参数/有具体值的参数
        //通过md对象使用md对象中的demo()方法
        md.demo();
    }
}

创建对象

创建对象的格式:
引用数据类型 对象名 = new 引用数据类型();

访问权限修饰符

访问权限修饰符从大到小的顺序是:
public > protected > default > private
在这里插入图片描述

类和对象

类的定义:
类是相同属性和行为的抽象出来的就是类,定义类时,使用class修饰。
对象的定义:
对象就是类的一个具体的个体的实例。

构造方法

构造方法是一个特殊的方法,主要用于创建对象,并初始化属性和实例方法。
格式:
[访问权限修饰符] 当类的类名(参数列表)[异常]
{
方法体;
}
备注:
1、访问权限修饰符和构造方法名之间什么都没有。
2、所有被class修饰的类,默认情况下都有一个无参数的构造方法,该构造方法默认被编译器和JVM创建。
3、如果自己定义有参数的构造方法,推荐将无参数的构造方法一起定义了,因为此时编译器和JVM就不会创建该无参数的构造方法了。
4、构造方法不能直接调用,创建对象时调用。

package com.wlx.day05;

public class ConstructorDemo
{

    public String username = "helloname";
    private String userpwd = "hn123456";


    /**
     * 定义一个无参数的构造方法
     */
    ConstructorDemo()
    {
        System.out.println("无参数的构造方法");
    }

    ConstructorDemo(String s,String p)
    {
        username = s;
        userpwd = p;
    }


    public static void main(String[] args) {
     ConstructorDemo  cd =  new ConstructorDemo("jim","jim123");
        System.out.println(cd.username);
        System.out.println(cd.userpwd);
    }


}

this关键字

this表示当前实例对象的自我引用。
备注:
1、this只能在非静态中使用。
2、当局部变量和全局变量同名时,此时全局变量被屏蔽,可以使用this.全局变量名调用被屏蔽的全局变量。
3、一个构造方法调用另一个构造方法时,使用this(参数列表)调用,该this()必须在构造方法体中,除注释以外的第一行。
4、当一个实例方法(非静态方法)调用另一个实例方法时,可以使用this.实例方法名()去调用,由于方法重载的约束条件,此时this.可以省略。
5、使用this判断当前调用该实例方法的对象和传递参数进来的对象是否是同一个对象。

package com.wlx.day05;

public class ThisDemo
{
    public String username = "helloname";
    private String userpwd = "hn123456";


    public ThisDemo()
    {

        //调用有两个字符串类型参数的构造方法
//        this("lilei","lilei123");
//        System.out.println("无参数的构造方法");
    }

    public  ThisDemo(String username,String userpwd)
    {
        this.username = username;
        this.userpwd = userpwd;
        System.out.println("username***"+username);
        System.out.println("userpwd***"+userpwd);
    }

    /**
     * 非静态方法/实例方法
     * @param username
     * @param userpwd
     */
    public  void  demo(String username,String userpwd)
    {
        //打印局部变量username和userpwd的值
        System.out.println("username = "+username);
        System.out.println("userpwd = "+userpwd);
        //打印全局变量username和userpwd的值
        System.out.println("this.username = "+this.username);
        System.out.println("this.userpwd = "+this.userpwd);
    }


    public  void  test()
    {
        System.out.println("test()---");
        //调用有两个字符串类型形参的demo()方法
//        this.demo("hanmm","hanmm123");
        demo("hanmm","hanmm123");
    }


    /**
     *
     * @param obt
     */
    public  void  obj(Object obt)
    {
        //此处的==等于号,比较的是地址是否相等
       if(this == obt)
       {
           System.out.println("this和obt是同一个对象");
       }
       else
       {
           System.out.println("this和obt---不是---同一个对象");
       }
    }




    public static void main(String[] args) {
       ThisDemo td = new ThisDemo();
       ThisDemo td1 = new ThisDemo();
//       td.test();
        td.obj(td1);
    }


}

方法的重载

方法重载是一个方法的多种表现形式。
约束条件:
1、方法名相同,方法的形参个数,顺序,类型至少有一项不同。
2、方法的返回值类型可以不同。
3、抽象方法也可以被重载。
4、方法重载对访问权限修饰符没有要求。
5、方法重载对抛出的异常也没有任何要求。

package com.wlx.day05;

public class OverLoadDemo
{

    public void  demo()
    {

    }

    /**
     * 方法的重载
     * @param a
     */
    public void  demo(int a)
    {

    }

    private   String  demo(String s)
    {
        return  s;
    }

    protected   void  demo(int a,String s)
    {

    }

    void  demo(String a,int s)//throws Exception
    {

    }

    //抽象方法
//    public abstract  void  demo(double d);


}

面向对象特征

封装、继承、多态三大特征。
1.1、封装
封装类定义:
隐藏属性,提供公共方法用于设置或获取属性,并在公共的方法中对数据进行验证,这样的一个类就是封装类。

作用:

高内聚:
封装类/思想,源码中的代码和当前类的关系紧密度高。
低/松耦合:
当类可以用在任何一个需要该类的软件项目中(就是封装的这个类和其他类之间的紧密度低/松)。

package com.wlx.day05;

/**
 * 封装类
 */
public class Person2
{
    //属性
    private String username;
    private String userpwd;
    private int userage;
    private String usersex;


    public Person2()
    {

    }

    public Person2(String username,String userpwd,String usersex,int userage)
    {
        /*this.username = username;
        this.userpwd = userpwd;
        this.usersex = usersex;
        this.userage = userage;*/
        setUsername(username);
        setUserpwd(userpwd);
        setUsersex(usersex);
        setUserage(userage);
    }

    /*public void hhhh(String username,String userpwd,String usersex,int userage)
    {
        this.username = username;
        this.userpwd = userpwd;
        this.usersex = usersex;
        this.userage = userage;
    }*/

    //为username赋值
    public void  setUsername(String username)
    {
        if(username.length() >= 2 && username.length() <= 6)
        {
            this.username = username;
        }
    }

    //从username获取值
    public String getUsername()
    {
        return  username;
    }

    //为userpwd赋值
    public void  setUserpwd(String userpwd)
    {
        if(userpwd.length() >= 3 && userpwd.length() <= 6)
        {
            this.userpwd = userpwd;
        }
    }

    //为userage赋值
    public void setUserage(int userage)
    {
        if(userage >= 0 && userage <= 160)
        {
            this.userage = userage;
        }
    }

    //为usersex赋值
    public void setUsersex(String usersex)
    {
        if(usersex.equals("男") || usersex.equals("女"))
        {
            this.usersex = usersex;
        }
    }

    public String getUserpwd() {
        return userpwd;
    }

    public int getUserage() {
        return userage;
    }

    public String getUsersex() {
        return usersex;
    }


    /*public static void main(String[] args)
    {
        *//*Person2  p2 = new Person2();
        p2.usersex = "man";*//*
//        Person2  person2 = new Person2("tom","tom123","man",123);
    }*/


}
  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值