JavaSE基础(17) static 关键字

news/2024/11/28 4:38:42/

static 关键字

静态(static)可以修饰属性和方法。

称为静态属性(类属性)、静态方法(类方法)。

静态成员是全类所有对象共享的成员。

在全类中只有一份,不因创建多个对象而产生多份。

不必创建对象,可直接通过类名访问。

示例:

Person p1 = new Person();
p1.name = "小明";
p1.age = 23;
//p1.city = "广州";Person p2 = new Person();
p2.name = "晓东";
p2.age = 28;
//p2.city = "广州";//.......
p1.print();
p2.print();// Person.city = "深圳";//静态属性的访问:类名.属性名// System.out.println("城市:"+Person.city);p1.city = "苏州";
p1.printCity();
p1.print();
p2.print();//调用静态的方法:类名.方法名
Person.printCity();
/*** 静态变量,属于类,和对象无关,*/
public class Person {String name;int age;static String city;//静态的,属于类,对象也可以访问,但是所有的对象共享着一份数据;static final double PI = 3.14;//表示静态的常量,运行的过程数据不能改变,同时属于类,可以用类名直接调用public void eat(){System.out.println("吃东西.....");}public static void test(){System.out.println("test()........");}/*** 静态的方法*/public static void printCity(){test();//System.out.println("name:"+name);// eat();System.out.println("城市:"+Person.city);}public void print(){printCity();eat();System.out.println("name:"+this.name+",age:"+age+",city:"+city);}
}

静态属性

形成静态属性,不再属于对象。非静态属性(实例属性)属于对象,随着对象的创建而产生,每个对象的属性值都是独立的。

静态属性是属于类的,只有一份(节省内存)。应该由类来访问,但是对象也可以访问,所有的对象共享着一份数据。

非静态属性由对象访问:对象.属性-->赋值,取值

静态属性由类访问:类名.静态属性-->赋值,取值

静态属性可以和final搭配使用,形成静态常量。

静态方法

形成了静态方法。属于类而不再属于对象了,应该由类来访问,但是对象也可以访问。

普通的方法由对象调用。

静态方法中:只能访问属于类,不能访问属于对象。

        A:访问静态属性

        B:访问静态方法

        C:不能直接访问非静态属性

        D:不能直接访问非静态方法

非静态方法中:属于类,属于对象都可以访问

        A:访问静态属性

        B:访问静态方法

        C:访问非静态属性

        D:访问非静态方法

    public void eat(){System.out.println(this.name+",吃东西啦。。。"); //非静态方法,可以访问非静态属性System.out.println("城市:"+Person.city); //非静态方法,可以访问静态属性this.showInfo(); // 非静态方法,可以调用非静态方法。Person.printCity(); //非静态方法,可以调用静态方法。}public static void test1(){ //属于类的System.out.println(Person.city); //静态方法中,可以访问静态属性。Person.printCity();//静态方法中,可以访问静态方法。// System.out.println(name); //静态方法中,不能访问非静态的属性// this.showInfo(); //静态方法中,不能调用非静态的方法。}
    public void eat(){System.out.println(this.name+",吃东西啦。。。"); //非静态方法,可以访问非静态属性System.out.println("城市:"+Person.city); //非静态方法,可以访问静态属性this.showInfo(); // 非静态方法,可以调用非静态方法。Person.printCity(); //非静态方法,可以调用静态方法。}public static void test1(){ //属于类的System.out.println(Person.city); //静态方法中,可以访问静态属性。Person.printCity();//静态方法中,可以访问静态方法。// System.out.println(name); //静态方法中,不能访问非静态的属性// this.showInfo(); //静态方法中,不能调用非静态的方法。}

静态代码块

代码块,就是一块代码。使用{}包裹起来的。

public class Person {private String name;private int age;static String city;//用static修饰的属性,只有一份数据,被所有的对象共享//static修饰属性的时候,一般和final一起使用,形成静态常量static final double PI = 3.1415;//直接写的类里面的,每次创建对象都会执行,而且是在构造函数之前执行{System.out.println("构造代码块......");}public Person(){System.out.println("这是无参的构造函数......");}public Person(String name,int age){System.out.println("有参构造函数.........");this.name = name;this.age = age;}//生成了setter,getter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void test(){System.out.println("test().......");}public void print(){//可以访问成员变量,类变量System.out.println("name:"+name+";"+"age:"+age+";city:"+city);//可以访问成员方法,类方法staticDemo();test();}public static void staticDemo(){System.out.println("staticDemo()......");}//静态的方法,也叫类方法public static void staticMethod(){//不能直接访问成员变量
//        System.out.println("name:"+name);
//        System.out.println("age:"+age);//可以访问静态属性System.out.println("city:"+city);//不能直接访问成员方法
//        print();//可以访问静态的方法staticDemo();}
}

普通代码块:{}包裹起来一段代码。注意作用域。

构造代码块:写在类里,方法外的代码块,就叫构造代码块。当创建对象的时候,随着构造函数的调用而执行。而且优先于构造函数执行。构造函数被多次调用,那么构造代码块也被多次调用。

静态代码块:用static关键字修饰的代码块。在类第一次使用的时候执行,优先于main的执行。只执行一次。例如连接数据库的驱动等

同步代码块:多线程。

优先级别:静态代码块 > 构造代码块 >构造方法


http://www.ppmy.cn/news/40246.html

相关文章

博客文章效果

学习风宇blog md文档转html&#xff08;markdown-it的使用&#xff09;语法高亮、行号、一键复制toc生成目录sticky粘性定位 <style lang"scss"> import url(//at.alicdn.com/t/c/font_4004562_9v94jccafmc.css); import url(https://fonts.font.im/css?fam…

注解的使用

目录 注解的理解 基本的 Annotation介绍 Override 注解的案例 Override 使用说明 Deprecated的说明 SuppressWarnings 注解的案例 元注解 元注解的基本介绍 Retention 注解 Target Documented Inherited注解 注解的理解 1)注解(Annotation)也被称为元数据(Metadat…

创建型模式-建造者模式(Builder)-解决复杂对象创建问题

创建型模式-建造者模式Builder-解决复杂对象创建问题 创建型模式建造者模式(Builder)解决复杂对象创建问题描述适用环境优点:缺点:违反原则代码实现背景描述创建型模式 建造者模式(Builder) 解决复杂对象创建问题 描述 通过将一个复杂对象的构建过程分解为多个简单对…

VMware安装 kali-linux出现的报错:未能启动虚拟机

VMware安装 kali-linux出现的报错&#xff1a;未能启动虚拟机 右键-兼容性&#xff0c;改成vm16. 发生错误&#xff0c;导致虚拟 CPU 进入关闭状态 找到.vmx文件&#xff0c;搜索并修改成&#xff1a;virtualHW.version "16"

Linux常用命令问答

文章目录本文根据《Linux就该这么学》进行总结 在RHEL 7系统及众多的Linux系统中&#xff0c;最常使用的Shell终端是什么&#xff1f; 答&#xff1a;Bash&#xff08;Bourne-Again SHell&#xff09;解释器。执行Linux系统命令时&#xff0c;添加参数的目的是什么&#xff1f;…

pip、conda查看镜像源及更换镜像源

1.查看已经安装过的镜像源&#xff1a;conda config --show 查看配置项channels channels: https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/cpu/https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/co…

【StarRocks】数据结构和修改表语句大全

StarRocks的改表语句 文章目录StarRocks的改表语句1 数据类型2 修改表结构3 示例1 数据类型 2 修改表结构 StarRocks 支持多种 DDL 操作。 可以通过 ALTER TABLE 命令可以修改表的 Schema&#xff0c;包括增加列&#xff0c;删除列&#xff0c;修改列类型&#xff08;暂不支持…

银行数字化转型导师坚鹏:金融数字化转型助力乡村振兴及案例

金融数字化转型助力乡村振兴及案例课程背景&#xff1a; 很多银行存在以下问题&#xff1a;不清楚如何借助数字化转型助力乡村振兴&#xff1f;不知道普惠金融模式和产品如何有效创新&#xff1f;不知道数字化转型助力乡村振兴的成功案例&#xff1f; 课程特色&#xff1…