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

java

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变量" title="static变量">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]);

}

}

}

 同类中静态方法调用非静态方法

class ArrayDemo {

public static void main(String[] args) {

//定义数组

int[] arr = {28,55,37,46,19};

//静态方法

//printArray(arr);

//非静态方法

//ArrayDemo ad = new ArrayDemo();

//ad.printArray(arr);

//测试类的作用:创建其他类的对象,调用其他类的功能。

//而我们现在的操作是跟数组相关的,所以,你应该把这些操作定义到数组操作类中

//定义一个数组的操作类

//有了数组操作类之后的调用

ArrayDemo at = new ArrayDemo();

at.printArray(arr);

}

/*

public static void printArray(int[] arr) {

for(int x=0; x<arr.length; x++) {

if(x == arr.length-1) {

System.out.println(arr[x]);

}else {

System.out.print(arr[x]+", ");

}

}

}

*/

//假设该方法不是静态的

public void printArray(int[] arr) {

for(int x=0; x<arr.length; x++) {

if(x == arr.length-1) {

System.out.println(arr[x]);

}else {

System.out.print(arr[x]+", ");

}

}

}

}

java中在同一个文件夹下,类定义在两个文件中和定义在一个文件中其实一样的。

例如在同一个文件夹下有两个文件 ArrayDemo.java 和ArrayTool.java

实例:

/*

在同一个文件夹下,类定义在两个文件中和定义在一个文件中其实一样的。

*/

class ArrayDemo {

public static void main(String[] args) {

//定义数组

int[] arr = {28,55,37,46,19};

//方法改进为静态后,就可以直接通过类名调用

ArrayTool.printArray(arr);

}

}

class ArrayTool {

//把构造方法私有,外界就不能在创建对象了

private ArrayTool(){}

public static void printArray(int[] arr) {

for(int x=0; x<arr.length; x++) {

if(x == arr.length-1) {

System.out.println(arr[x]);

}else {

System.out.print(arr[x]+", ");

}

}

}

}

以上是 java学习(四)static静态变量 和this 的全部内容, 来源链接: utcz.com/z/393484.html

回到顶部