java学习(四)static静态变量 和this

java中的this

/*
    this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。

        注意:谁调用这个方法,在该方法内部的this就代表谁。

    this的场景:
        解决局部变量隐藏成员变量
*/
//定义学生类
class Student {
    //姓名
    private String name;
    //年龄
    private int age;

    //姓名获取值
    public String getName() {
        return name;
    }

    //姓名设置值
    public void setName(String name) { //name = "林青霞";
        //name = name; //变量的使用规则:就近原则
        //这里是类名,目前还没有说过类似的用法,所以这个是有问题的
        //这里的调用只能通过对象名
        //这个对象如果存在,它应该代表的是Student的一个对象。
        //那么,谁能够代表当前类的对象呢? java就提供了一个关键字 this
        //Student.name = name;
        this.name = name;
    }

    //年龄获取值
    public int getAge() {
        return age;
    }

    //年龄赋值
    public void setAge(int age) {
        this.age = age;
    }
}

java中的static变量

/*
    static的特点:(它可以修饰成员变量,还可以修饰成员方法)
        A:随着类的加载而加载
            回想main方法。
        B:优先于对象存在
        C:被类的所有对象共享
            举例:咱们班级的学生应该共用同一个班级编号。
            其实这个特点也是在告诉我们什么时候使用静态?
                如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
            举例:
                饮水机(用静态修饰)
                水杯(不能用静态修饰)
        D:可以通过类名调用
            其实它本身也可以通过对象名调用。
            推荐使用类名调用。

            静态修饰的内容一般我们称其为:与类相关的,类成员
*/
class Student {
    //非静态变量
    int num = 10;

    //静态变量
    static int num2 = 20;
}

class StudentDemo {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.num);

        System.out.println(Student.num2);
        System.out.println(s.num2);
    }
}
/*
    static关键字注意事项
        A:在静态方法中是没有this关键字的
            如何理解呢?
                静态是随着类的加载而加载,this是随着对象的创建而存在。
                静态比对象先存在。
        B:静态方法只能访问静态的成员变量和静态的成员方法
                静态方法:
                    成员变量:只能访问静态变量
                    成员方法:只能访问静态成员方法
                非静态方法:
                    成员变量:可以是静态的,也可以是非静态的
                    成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
            简单记:
                静态只能访问静态。
*/
class Teacher {
    public int num = 10;
    public static int num2 = 20;

    public void show() {
        System.out.println(num); //隐含的告诉你访问的是成员变量
        System.out.println(this.num); //明确的告诉你访问的是成员变量
        System.out.println(num2);

        //function();
        //function2();
    }

    public static void method() {
        //无法从静态上下文中引用非静态 变量 num
        //System.out.println(num);
        System.out.println(num2);

        //无法从静态上下文中引用非静态 方法 function()
        //function();
        function2();
    }

    public void function() {

    }

    public static void function2() {

    }
}

class TeacherDemo {
    public static void main(String[] args) {
        //创建对象
        Teacher t = new Teacher();
        t.show();
        System.out.println("------------");
        t.method();
    }
}

java中的main方法

/*
    main方法的格式讲解:
        public static void main(String[] args) {...}

        public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。
        static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。
        void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。你返回内容给jvm没有意义。
        main:是一个常见的方法入口。我见过的语言都是以main作为入口。
        String[] args:这是一个字符串数组。值去哪里了?
            这个东西到底有什么用啊?怎么给值啊?
                这个东西早期是为了接收键盘录入的数据的。
                格式是:
                    java MainDemo hello world java
*/
class MainDemo {
    public static void main(String[] args) {
        //System.out.println(args); //[Ljava.lang.String;@175078b
        //System.out.println(args.length); //0
        //System.out.println(args[0]); //ArrayIndexOutOfBoundsException

        //接收数据后
        System.out.println(args);
        System.out.println(args.length);
        //System.out.println(args[0]);
        for(int x=0; x<args.length; x++) {
            System.out.println(args[x]);
        }
    }
}
时间: 2025-01-23 06:11:21

java学习(四)static静态变量 和this的相关文章

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

android 尽量不要使用static静态变量

使用静态static静态变量潜在性问题: 1.占用内存,并且内存一般不会释放: 2.在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误. 3.不能将activity作为static静态对象,这样使activity的所有组件对象都存入全局内存中,并且不会被回收: (转自:http://blog.csdn.net/ctcwri/article/details/8858414) 静态变量的生命周期: 类在什么时候被加载? 当我们启动一个app的时候,系统会创建一个进程,此进程会加载一

static 静态变量,静态方法

Java 之静态变量 引入 一个类可以创建多个对象 ,每个对象都拥有自己的成员,各自互相独立.然而在某些特殊情况下,我们希望该类的所有对象共享一个成员,这个时候就可以把这个成员设置为static 在Java中,被static 修饰的成员称为静态成员,它是属于整个类的,在类被加载的时候被分配到静态区(在堆里面).这个时候属于它就不单独属于某个特定的对象了,即被类的所有对象所共享.静态成员可以使用类名直接访问,当然也可以使用对象命进行访问,介于它的特殊性,更推荐使用类名进行访问. 运行结果: Jav

C#中static静态变量的用法

使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型 静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: A.该变量在全局数据区分配内存. B.初始化:如果不显式初始化,那么将被隐式初始化为0. 静态局部变量 定义:在局部变量前加上static关键字时,就定义了静态局部变量. 特点: A.该变量在全局数据区分配内存

Static静态变量和非静态变量

Static静态变量:   不同的对象共享这个变量的存储空间 而不是静态变量   每个对象具有可变的存储器空间 public class StaticDemo { private int count=0; private static int staticCount=0; public StaticDemo() { System.out.println(++count); System.out.println(++staticCount); } public static void main(S

[转] C# 中的static静态变量

logitechyan原文关于C#中static静态变量 C#静态变量使用static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一C#静态变量都是同一个值,同一个类的不同实例的同一非 静态变量可以是不同的值.静态函数的实现里不能使用非静态成员,如非静态变量.非静态函数等. 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.

springMVC3学习(四)--访问静态文件如js,jpg,css

如果你的DispatcherServlet拦截的是*.do这样的URL,就不存在访问不到静态资源的问题 如果你的DispatcherServlet拦截了"/"所有的请求,那同时对*.js,*.jpg的访问也就被拦截了. 我们在进行springMVC开发时,必定会在jsp页面引入js.img和css等文件. 大多数人会将这些分类存放在WebRoot文件下新建的文件夹下面. 同时,会在web.xml文件中配置拦截所有请求.这样就造成了页面无法访问到js.img和css文件夹中的文件了 方法

PHP之static静态变量详解(一)

什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而 auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放).静态变量虽在程序的整个执行过程中始终存在,但是在它作 用域之外不能使用. 另外

static静态变量

static静态变量 static 关键字来定义静态方法和属性.static 也可用于定义静态变量声明类属性或方法为静态,就可以不实例化类而直接访问.静态属性不能通过一个类已实例化的对象来访问(但静态方法可以). 为了兼容 PHP 4,如果没有指定访问控制,属性和方法默认为公有. 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用. 静态属性不可以由对象通过 -> 操作符来访问. 用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误. 就像其它所有的