Java学习笔记(六)---- 方法构造及包的理解

文章详细阐述了Java中的构造方法,包括其特征、作用以及无参和有参构造方法的定义。此外,还讨论了方法重载的概念,通过示例说明如何通过参数列表区分不同的方法。文章还涉及了对象创建过程,值传递和引用传递的区别,以及关键字`this`的使用。最后提到了类的静态成员、代码块的执行顺序和包的组织与访问权限控制。
摘要由CSDN通过智能技术生成

方法的构造与重载

构造方法特征:
    每一个类中默认都有一个无参的构造方法
    构造方法名字必须与类名相同
    构造方法没有返回值 且不需要void修饰
    如果一个类中定义了有参的构造方法 默认无参的构造方法就会被覆盖掉 需要显性的定义出来

构造方法作用:
    主要用来为创建的对象初始化
    成员变量的默认值 就在在无参的构造方法中赋值的

方法重载:
    在一个类中 有多个名称相同的方法 称为方法重载
    当出现多个方法名相同时 可以通过参数的类型 个数 顺序来区分所调用的方法

    普通的成员方法也可以方法重载

无参数的构造方法:

public Person(){
            System.out.println("Person默认的无参构造方法");
            name = null;
            age = 0;
            gander = null;
        }

有参数的构造方法:

 public Person(String n,int a,String g){
            System.out.println("有参的构造方法");
            name = n;
            age = a;
            gander = g;
        }

方法的重载:

        public void max(int x,int y){ }
        public void max(int x,int y,int z){ }
先设计人类 定义了功能
让人做具体的事情 需要创建一个具体的人对象(实例)
Person()是人类中构造方法
public static void main(String[] args) {

        Person p1 = new Person();
        p1.name = "jim";
        System.out.println(p1.name);

        Person p2 = new Person("tom",20,"男");
        System.out.println(p2.name);

        Person p3 = new Person("张三","男",22);
        System.out.println(p3.age);
    }

值传递

new Person()在内存中创建一个对象
Person 声明一个变量表示对象

1.启动main方法,main就被加载到栈空间中
2.new Person() 把Person.class文件加载到虚拟机内存中(方法区)
3.Person P1 P1只是持有对象在内存空间中的地址,并不是对象本身,所以把这种变量称为引用变量
4. = 只是把堆空间中的内存地址 赋给左边的栈中的变量,栈中的变量只是持有对对象访问的引用地址
public class Test {

    public static void main(String[] args) {

        

        int[] a = {};
        a[0] = 1;

        Person P1 = new Person();
            P1.name = "张三";
            P1.age = 20;
            P1.gander = "男";
            P1.show();

        Person P2 = new Person();
            P2.name = "李四";
            P2.age = 22;
            P2.gander = "男";
            P2.show();

        Person P3 = P2;//只是把对象的地址赋给了P3,并没有重新创建出一个新的对象
            P3.name = "王五";
        System.out.println(P2.name);
        System.out.println(P3.name);

        Person P4;
        P4 = new Person();//P4表示的是一个对象,指向的是一个对象,最好不要说P4就是对象
        Person P5 = P4;

    }
}
演示的是传参时,参数类型为基本类型,传参时,是将自己的值赋给另一个变量
另一个变量的值改变,不影响实参的结果
public class Demo {

    public static void main(String[] args) {
        Demo d = new Demo();
        int x = 10;
        d.test(x);
        System.out.println(x);
    }

    public void test(int a){
        a = 20;
        System.out.println(a);
    }
}
参数类型为引用类型时,不是传对象本身,传递的是对象地址
当形参发生改变时,实参也会发生改变
public class Test {

    public static void main(String[] args) {
        Car bm = new Car();
            bm.name = "宝马";
        Test t = new Test();
            t.test(bm);//只是把对象的地址传递
        System.out.println(bm.name);
    }

    public void test(Car car){
        car.name = "奔驰";
        System.out.println(car.name);
    }
}

关键字

this:表示当前正在操作的对象,常用来区分同名的成员变量和局部变量

public Person(String name,int age){
        //this表示当前正在操作的对象
       this.name = name;
       this.age = age;
    }

static:静态,用来修饰类的属性,方法,代码块和内部类

public class ChinaBank {

    //大家都不一样的 不应该定义为静态
    String account;
    String password;
    //被static修饰的变量,在内存中只有一份
    //被static修饰的变量和类一样,在内存中只有一份
    static String bankname = "中国银行";
    static double PI = 3.1415926;

    /*
    static修饰方法
    随着类加载而加载
     */

    public static void testbank(){
        //System.out.println(account); 静态方法先加载,不能使用非静态的成员
        System.out.println(bankname);//静态的方法中只能使用静态成员
    }

}

代码块

方法是一个有名字的代码块
代码块:类似一个没有名称的方法
       没有名字 怎么调用?
代码块在满足某种条件时,自动被调用执行
非静态代码块:(又称为实例代码块)在创建类的对象时被调用
静态代码块:类加载时被调用(在类中使用main方法,通过类名访问类中静态成员,创建类的对象时)
          类只会被加载,静态代码块只执行一次
 非静态的代码块,先于构造方法执行
  
    1.加载类
    2.先加载静态的成员(静态变量,方法,代码块)
    3.创建对象
    4.调用构造方法

包的概念:

                 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用:

                 1.避免类重名

                 2.按照不同功能管理类

                 3.控制访问权限

包(package)的命名规范:

在包名中,可以使用.号来区分包的级别;包名一般情况下是小写

第一级 指该项目的类型,如com,org,gov等,

第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei

第三级 指项目的名称,如:bcms,oa,erp,cms等

第四级 指项目模块的名称,如:bean,action,exception等

权限修饰符

1)public :公共权限 修饰类、属性、方法。可以被任意类访问

2)protected:受保护的权限 修饰属性、方法。

可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问。

3)default:同包权限 修饰类、属性、方法。只能被同包的类访问

4)private:私有权限 修饰属性、方法。 只能在本类中访问

    public String pubname;//公共权限
    protected String proname;//受保护权限
    String name;//默认权限
    private String priname;//私有权限
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值