Java学习日志7

一、成员变量和局部变量的区别

1、在类中的位置不同
成员变量:类中方法外
局部变量:方法内或者方法声明上
2、在内存中的位置不同
成员变量:堆内存
局部变量:栈内存
3、生命周期不同
成员变量:随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4、初始化值不同
成员变量:有默认的初始化值
局部变量:没有默认的初始化值,必须先定义,赋值,才能使用。

基本类型作为形式参数,形式参数的改变不影响实际参数
引用类型作为形式参数,形式参数的改变直接影响实际参数

二、封装

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。

封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。

private关键字
可以修饰成员变量和成员方法,被修饰的成员只在本类中才能访问

this关键字
哪个对象调用那个方法,this就代表那个对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
this内存图
在这里插入图片描述
三、构造方法

构造方法的作用是给对象数据进行初始化,它的方法名与类名相同,没有返回值,void都没有。构造方法也可以重载。举例如下

class student
{
    private String name;
    private int age;
    public student()
    {
        System.out.println("这是无参构造方法");
    }
    public student(String name)
    {
        System.out.println("这是带一个String类型的构造方法");
        this.name=name;
    }
    public student(int age)
    {
        System.out.println("这是带一个int类型的构造方法");
        this.age=age;
    }
    public student(String name,int age)
    {
        System.out.println("这是一个带多个参数的构造方法");
        this.name=name;
        this.age=age;
    }
    public void show()
    {
    System.out.println(name+"------"+age);
    }
}
class ConstructDemo
{
    public static void main(String[] args)
    {
        student s=new student();
        s.show;
        System.out.println("----------------");
        student s2=new student("张三");
        s2.show;
         System.out.println("----------------");
        student s3=new student(18);
        s3.show;
         System.out.println("----------------");
        student s4=new student("张三",18);
        s4.show;
    }
}

如果你不提供构造方法,系统会给出默认构造方法,如果你提供了构造方法,系统将不再给出,建议永远自己给出无参构造方法

四、类的初始化过程

Student s = new Student();在内存中做了哪些事情?
加载Student.class文件进内存
在栈内存为s开辟空间
在堆内存为学生对象开辟空间
对学生对象的成员变量进行默认初始化
对学生对象的成员变量进行显示初始化
通过构造方法对学生对象的成员变量赋值
学生对象初始化完毕,把对象地址赋值给s变量

五、static关键字

static关键字用于创建静态变量,它可以修饰成员变量和成员方法。static关键字随着类的加载而加载,并且优先于对象存在,能被所有类的对象共享,可以通过类名调用。需要注意的是,静态方法中没有this关键字,并且静态方法只能访问静态变量和静态方法。
举例:

class Person
{
    String name;
	int age;
	static String country;
	public Person(){}
	public Person(String name,int age)
	{
	    this.name=name;
		this.age=age;
	}
	public Person(String name,int age,String country)
	{
	    this.name=name;
		this.age=age;
		this.country=country;
	}
	public void show()
	{
	    System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
	}	
}
class PersonDemo
{
    public static void main(String[] args)
	{
	    Person p1=new Person("邓丽君",16,"中国");
		p1.show();
		Person p2=new Person("杨幂",22);
		p2.show();
		Person p3=new Person("凤姐",20);
		p3.show();
		p3.country="美国";
		p3.show();
		p1.show();
		p2.show();
	}
}

在这里插入图片描述
上面的代码中使用了static关键字来修饰变量country。上面的代码在运行时,首先加载class文件,随着class文件的加载,内存中的方法区加载了不同class文件的成员变量和成员方法,同时加载了构造方法,以及在方法区中的静态区加载了main方法和country变量。在执行Person p1=new Person()时,就会在栈内存中生成局部变量p1和在堆内存中生成Person类的成员变量和成员方法标记以及静态标记,并且将该片区域的地址赋值给p1。给country赋值一次后它就会保持值不变,而重新赋值后值就会改变。

static关键字内存图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值