JAVA学习笔记10——static+this

来源:互联网 发布:md5加密java代码 密钥 编辑:程序博客网 时间:2024/05/21 01:55

最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。

继续第十篇,这篇内容较少,主要是因为与后面的联系不大,所以单成一篇。

这篇主要讲static与this两个JAVA保留字用法。

首先来说一说static,直译为静止的,在JAVA作为一种修饰的关键字用来修饰变量或者方法,使其成为静态变量或者静态方法。


了解完static的大致内容后我们来看一看static在内存分配图里面的存在情况:


对应代码:

public class Student {//成员变量从属于对象 String name; int id;    //静态变量从属于类(内存中放在方法区) static  int  ss; public static void printSS(){ System.out.println(ss);  //静态方法只能引用静态的属性和方法 } public void study(){ printSS(); System.out.println(name+"在學習"); } public void sayHello(String sname){ System.out.println(name+"向"+sname+"說:你好!"); }}
public class Test {public static void main(String[] args) {Student.ss = 323;//不用new,直接拿来用即可Student.printSS();Student s1 = new Student();}}
分析上图可以得到以下结论:1,static变量和方法一旦产生便只存在于方法区中,不会存在于对象堆中,它从属于类而和new出来的具体对象无关。2,由于它只产生于方法区中,那么在静态方法里面只能调用静态方法和变量(因为它没有访问对象堆的能力,自然也就无法调用实例变量和方法了)。3,由于非静态方法每一次执行都要加载类所在的方法区,会连同里面的static变量和方法一起加载,所以非静态方法和变量可以调用static变量和方法。

好了,关于static的内容就介绍这么多了,下面开始介绍this:

this关键字是一个隐式参数,每个方法(static除外)都有隐式参数的自动传参,不用写出来也会自动传,传this的时候传的是本身的对象(这是由于new出来的n个对象都共享同一段方法区的代码,如果不用this指明当前调用方法的对象则会引起混乱)。


public class Student { String name; int id;    public  Student(String name,int id){ this(name);   //通过this调用其他构造方法,必须位于第一句! Constructor call must be the first statement in a constructor this.name = name; this.id = id; } public Student(String name){ this.name = name; } public Student(){ System.out.println("构造一个对象"); } public void setName(String name){ this.name = name; } public void study(){ this.name=  "张三"; System.out.println(name+"在學習"); } public void sayHello(String sname){ System.out.println(name+"向"+sname+"說:你好!"); }}
好了,本篇到此结束。小小地恭喜自己博客写到了十篇,虽然访问量寥寥无几,但是我还是会继续坚持地写下去,积少成多,最终让自己和看到我博客的人都有或多或少的收获。



0 0