栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

从C到JAVA(类和对象)【3】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从C到JAVA(类和对象)【3】

目录

1.static成员

1.1static修饰变量

1.2static修饰方法

1.3static成员变量的初始化

2.代码块

2.1普通代码块

2.2构造代码块

2.3静态代码块

3.内部类

3.1实例内部类

内部类对象的创建

3.2静态内部类

静态内部类对象的创建

3.3局部内部类

3.4匿名内部类

4.对象的打印


1.static成员

1.1static修饰变量

static可以用来修饰变量,这种变量叫做静态变量,它处于静态区,不属于某个对象,可以称之为类变量,可以不依赖对象用类名直接调用

比如

class Student{
    int num;
    static int age;
}

public class Main {
    public static void main(String[] args) {
    Student.age = 10;        
    }
}

在这里我们给age进行了赋值操作,可以看到并没有创建对象,直接用类名进行访问

注意:静态变量在内存中的存储只有一份,一个位置修改后,另外一个位置也会做出相应的改动

1.2static修饰方法

这个和static修饰成员变量类似,对于类中用static修饰的方法,我们称之为类方法,同样,他也是不属于任何对象的,可以通过类名调用,处于方法区

比如:

class Student{
    int num;
    static int age;
    public static void goClass(){
        
    }
}

public class Main {
    public static void main(String[] args) {
    Student.age = 10;
    Student.goClass();
    }
}

1.3static成员变量的初始化

static成员变量可以就地初始化,也可以通过静态代码块进行初始化,那什么是静态代码块呢?后面回讲到

2.代码块

代码块就是用{}包裹起来的内容

2.1普通代码块

比较少见,是定义在方法内部的代码

比如

public static void goClass(){

        {
             int x = 10;
            System.out.println(x);
        }
        int x = 123
        System.out.println(x);
    }

注意:这里再{}中定义的x在{}外将不能够使用,我们在IDEA上尝试,会报错

2.2构造代码块

构造代码块也叫实例代码块,是定义在类内部的代码块,一般用于初始化实例成员变量

比如

class Student{
    int num;
    static int age;

    {
        this.num = 10213;
        
    }
  }

2.3静态代码块

一般用于初始化静态的成员变量

比如

class Student{
    int num;
    static int age;

    static {
        age = 100;
    }
}

注意:静态代码块不论你生成多少个对象,只会执行一次,并且会优先于示例代码块和构造方法,因为静态代码块并不依赖于对象,可用上面的静态成员变量理解,静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

3.内部类

内部类其实就可以理解为在类的内部再创建一个类

3.1实例内部类

还是延续用上面的代码

class Student{
    int num;
    static int age;

    static {
        age = 100;
    }
    {
        num = 10213;

    }
    public static void goClass(){

        {
             int x = 10;
            System.out.println(x);
        }

        System.out.println(x);
    }
    class inStudent{

        public void a(){
            num = 100;
            System.out.println(num);
        }
        //访问外部类中的同名成员变量
        int num  = 10;
        public void b(){
            System.out.println(Student.this.num);
        }
        

    }
}

在这里面我们定义了一个内部类,我们可以看到内部类中可以直接访问外部类的成员变量,当内部类和外部类变量同名时,可以同外部类名.this.变量名来达到访问外部类目的

内部类对象的创建
    Student.inStudent is1= new Student().new inStudent();
    //另外一种定义方法
    Student s2 = new Student();
    Student.inStudent is2 = s2.new inStudent(); 

这里我们就是创建了一个内部类的对象取名is1 和is2,两种对象的创建方法没用本质上的区别

3.2静态内部类
class Student{
    int num;
    static int age;

    static {
        age = 100;
    }
    {
        num = 10213;

    }
    public static void goClass(){

        {
            int x = 10;
            System.out.println(x);
        }
        int x = 100;
        System.out.println(x);
    }
    static class sIStudent{
        static int age ;
        public static void a(){
            age = 10;
            System.out.println(age);
        }
        public static void b(){
            //System.out.println(Student.this.age);
            //这里编译会报错,因为静态方法中不存在this
        }
    }

}

注意:静态内部类中,只能访问外部类中的静态成员变量(类变量),遵循局部优先,没有this!没有this!!没有this!!!

静态内部类对象的创建
Student.sIStudent is = new Student.sIStudent();

3.3局部内部类

就是定义在外部类的方法或者代码块中的类,一般很少使用

class Student{
    int num;
    static int age;

    static {
        age = 100;
    }
    {
        num = 10213;

    }
    public static void goClass(){

        {
            int x = 10;
            System.out.println(x);
        }
        int x = 100;
        System.out.println(x);
    }
    public void a(){
        class inStudent{
            int num ;
            public void b(){
                num = 10;
                System.out.println(num);
                System.out.println(this.num);
            }
        }
    }

}

这一段和上面的内部类几乎同理,但是出了这个方法,类中的内容则会无效,并且局部内部类不能被修饰符修饰

3.4匿名内部类

匿名内部类会在接口的时候详细讲解

其实就是类创建的没有名字的一次性使用的对象

4.对象的打印

我们如果对对象直接打印,会得到一串地址,因为对象村的就是一块地址,那我们想直接打印对象中的常量属性,那么应该怎么做呢?答案是:重新toString方法

class Student{
    int num = 20;
    String name = "123";
    static int age = 100;

    @Override
    public String toString() {
        return "Student{" +
                "num=" + num +
                ", name='" + name + ''' +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student);
    }
}

这里不仅仅可以用这种输出格式,你也可以按照自己的需求,在return中进行修改即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988582.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号