JAVASE学习第二天(重载、this、Static、构造器)

怕死的免责声明:本人为现为新人笔者,此文章用于记录本人学习路程为主,因此文章内容无教学向。对于文章涉及内容,如有错误敬请指正,若有更好的建议及改进方法本人也愿虚心求教。若有参考本文章内容操作而出现的各种问题,现在下能力不足,也许无法解决,故各位谨慎借鉴。


方法在内存的分布

第一次调用到的时候:

类:方法区

方法:在栈中创建一个栈帧

创建对象:在堆中开辟内存,保存成员变量,不保存方法

调用创建对象的方法时:将那个方法在栈中创建新的栈帧,在使用完成后销毁。

所以说一般来说main的栈帧最先创建而最后销毁,

堆中的内存,由垃圾处理机制决定。

方法重载(overload)

方便使用嘛就。  方便调用

同一个类中方法名称相同参数列表不同

参数类型不同→类型,数量,位置但凡有一个不同就是不同。

重载和返回值没有关系!!!

构造器

1.构造器方法名和类名一样

2.没有返回值

3.通过new方法构造

4.我们没有自定义的时候默认有个无参构造的方法(注意 自定义了无参构造的话 要把无参的带上  为了可以正常的New一个对象)

    public Phone(){
        super();
    }
    
    public Phone(int a,String s1,String s2){
        this.size=a;
        this.name=s1;
        this.home=s2;
    }

知识点★

构造函数的执行是否可以表示对象已经创建?       不准确

创建对象为下面4步:

1.分配对象空间,并将对象成员变量初始化为0或空
2.执行属性值的显示初始化                                           
3.执行构造方法
4.返回对象的地址给相关的变量


this

本质:创建好的对象的地址   

(构造方法也是方法)

1.局部变量和成员变量间的区分

2.构造方法间的调用   记得放有效代码第一行


知识点★

基本类型传递按传递

其他引用类型的的按地址传递

    public static void main(String[] args) {
        int [] arr ={10,20,30,40};
        a(arr);
        System.out.println(Arrays.toString(arr));
    }
    private static void a(int[] arr){
        arr[1] = 100;
    }

Static

静态

可以修饰   成员变量 | 方法 |  代码块

在修饰变量时

A、static修饰变量保存到方法区中并且只有一份
B、static修饰的变量不属于对象而是属于类被所有对象所共用
C、static修饰的变量在使用时候推荐使用【类名.变量】进行使用

小结:static变量和非static变量的区别:
1.份数不同:静态变量:1份;非静态变量:1个对象一份。
2.存储位置不同:静态变量:方法区:非静态变量:堆中。
3.内存分配空间的时间不同:静态变量:第一次加载类的时候;非静态变量:创建对象的时候。
4.生命周期不同。静态变量和类的生命周期相同;非静态变呈的生命周期和所属对象相同。
5.调用方式不同
静态变量:通过类名调用Student.classRoom。
也可以通过对象名调用stu1.classRoom="301"但不推荐。
非静态变量:通过对象名调用stu1.name="小张"

在修饰方法时

静态方法    运用的时候不需要new对象

同样的可以直接通过 类名.方法名调用

    private static int anInt=100;
    private int anInt2=100;
    public static void aa(){
        System.out.println(anInt);
//        System.out.println(anInt2);  
        bb();
//        cc();
//        System.out.println(this.anInt2);
    }
    public static void bb(){
    }
    public void cc(){
        System.out.println(anInt);
        aa();
    }

static修饰方法
A、static修饰的方法称为静态方法调用时候直接使用类名.方法()]
B、静态方法中不可以直接使用非静态成员变量
C、静态方法中不可以直接调用非静态方法
D、静态方法中不可以使用this关键字

三个不可以:
静态方法中不可以直接访问非静态变量
静态方法中不可以直接访问非静态方法
静态方法中不可以访问this
理解:加载类的时候就加载静态变量和静态方法,此时可能还没有创建对象,所以非静态变量和非静态的方法还没有分配空间,无法访问
两个可以:
非静态方法中可以访问静态变皇
非静态方法中可以访问静态方法
理解:加载类的时候就已经加载静态变量和静态方法,创建对象后,非静态变量和非静态的方法才分配空间,此时静态变量和静态方法已经存在,可以访问

在修饰代码块时

静态代码块在类加载的时候执行,只执行一次

public class Demo01 {

    {
        System.out.println("非静态代码块");
    }
    static {
        System.out.println("静态代码块");
    }
    public Demo01() {
        System.out.println("构造方法");
    }

}




    public static void main(String[] args) {

        Demo01 demo01 = new Demo01();
        System.out.println("----------------");
        Demo01 demo02 = new Demo01();

    }

结果:

 static修饰代码块
A、静态代码块在类加载的时候执行只会执行一次
非静态代码块和构造函数每一次创建对象都会执行
B、静态代码块>非静态代码块>构造方法
C、
静态代码块:
1、给静态成员变量赋值
2、我们以后学习会有很多配置文件,这些配置文件加载一次即可,这个时候就可以写到静态代码块中
非静态代码块:
1、给对象中成员变量初始化赋眉
2、后期的匿名内部类进行赋值使用

总而言之    Static 要理解代码执行以及数据生成的顺序

总结:
优点:不需要在进行实例化。静态变量的值,直接赋新值即可,不需要参数传递,之后可以直接进行参数引用即可;静态方法可以直接通过”类名.方法"的形式进行方法调用。通常方法被多次调用,并且方法中没有动态方法引用的时候使用比较方便。
缺点:初始化加载到内存,如果后续没被引用,加大了内存负担和程序运行负担,影响程序运行效率(一般很小),并且静态变量如果多处被引用赋值,很可能导致参数值混乱,如果从线程安全、性能、兼容性上来看也是选用实例化(创建对象)方法为宜。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值