0


类和对象-上篇


什么是类和对象

Java是一门面向对象编程的语言,所以在Java中,一切皆对象,我们把这些对象共同具有的属性列表放在一个类中(比如人的眼睛,鼻子,嘴都放在人这个类中),这就组成了类与对象。

类的实例化

类的创建

class Person {
    //成员属性 实例变量
    int age;
    String name;
    String sex;
    //成员方法
    public void eat() {
            System.out.println("吃饭!");
      }

在创建类的时候,我们需要注意,所有类中定义的成员均有默认值。

命名规则:大驼峰写法,所有单词大写

类的引用

关于特殊值null

当我引用一个类,但是引用的值为null

例如 Person per1 = null;或者per

或者Person per2 = new Person();

然后将二者

System.out.println(per1.age);

System.out.println(per2.age.length());

二者都会报一个空指针异常的错误。

这是因为,当使用一个值为“null”的去引用任何成员变量或成员方法,都会报错。

但二者所代表的意思有所不同,因为第一个代表per的值为null,引用的成员变量是age,第二个per则是因为age的值为null,所以引用它的成员方法length时,空指针异常。

static关键字

看见static,本能反应,和对象无关。

1.修饰属性

static修饰的属性称为类属性,类变量,所有对象共享。

为什么会引入static变量

class Person {
    int age;
    String sex;
    String name;
    static String country="中国";
}

比如这两行代码

name作为成员变量,在所有对象调用时,会储存在堆中,每个对象都有自己对应的name。

country作为静态变量,在产生对象时,程序从右向左执行,此时会先将Person类加载到内存中,

而static修饰的变量会直接存储在JVM方法区中,所有对象共享。

被static修饰的变量,直接通过类名就可以访问,无需通过对象。

若在引用时修改static修饰的值,那么所有引用此值的地方都会改变(牵一发而动全身

** 在Java中,能否在方法内部定义static变量呢?**

答案是否定的,道理也很简单,方法中创建的变量为局部变量,都保存在栈中,而static变量保存在方法区中。

全局常量

当我们在类中创建一个成员常量 例如 float int a = 10;(赋常量值必须在定义时赋值)

既然是一个常量,也就无法修改。

也就是说每个对象的此值都是一样的。

这样的话,我不妨把常量的值直接放在方法区中,而非堆中,这样也就不需要每次创建对象就要专门在堆中存放常量的值了。

由此我们可以看出,

final其实就是一个天然的共享概念,直接定义为static final即可。

这样的话,相当于所有对象共享此值,并且是唯一的

在类中定义常量,一般都会使用全局常量

static final 共同修饰

命名规则:所有字母全部大写,多个单词下划线分隔

static final String STUDENT_SCHOOL = "清华大学" ;

总结

1.static变量称为类属性,在方法区中存储,该类的所有对象共享此变量。

2.若在类中定义了常量(定义时赋值),一般我们使用 static 和 final 共同修饰,全局常量

3.要使用类属性,我们通常直接通过类名称,属性名称

不推荐使用对象来调用属性,不规范

4.null引用也可以调用

2.修饰方法

static修饰的方法称之为类方法,工具方法(静态方法)

static修饰的方法也是通过类名称直接使用,没有对象就可以访问。

为什么主方法是静态方法呢?

 public static void main(String[] args) {

因为主方法是程序的入口,如果主方法也是成员方法也就需要对象调用。

如果一个程序连入口都没有又从哪产生对象?

所以程序从主方法执行,要用静态方法直接调用才能调用起来,无需产生对象。

成员变量,方法与静态变量,方法互相调用

成员方法是否可以直接调用静态方法和静态变量?

静态方法是否可以直接调用成员方法和成员变量?

成员方法因为自身有对象,可以直接调用成员方法和变量,又因为静态方法不需要对象,所以也可以调用静态方法和变量。

静态方法自身没对象,但是调用成员方法和变量的前提就是需要对象,所以无法调用成员方法和变量,但是可以调用静态方法和变量。

因此得出结论:

1.在静态方法只能调用静态方法或者静态属性,static家族之间可以互相调用,不能直接调用成员方法和成员属性,必须通过对象来调用。

2.在成员方法中既可以调用成员方法,也可以调用静态方法(此时都已经产生了对象,一定是可以访问静态域)

3.如何用static

共享变量:

如country(国家)属性

工具类的方法:

Arrays.sort(int[]array)

Arrays.copyOf()

这些Arrays提供的操作数组的方法,设计为static方法

普通的类能否使用static关键字修饰?

类定义出来就是要产生对象的,所以static不能修饰普通的类

标签: java

本文转载自: https://blog.csdn.net/weixin_65278827/article/details/124174025
版权归原作者 小白的含金量 所有, 如有侵权,请联系我们删除。

“类和对象-上篇”的评论:

还没有评论