博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
static总结
阅读量:4322 次
发布时间:2019-06-06

本文共 4139 字,大约阅读时间需要 13 分钟。

static:

* static静态的,是一个关键字,用来修饰成员变量或者成员方法;
* 特点如下:
* 1. 被static修饰的成员,属于类成员,是类的一部分.
* 2. 被static修饰的成员变量,属于共享数据,一个地方改变了,在另外的地方访问也就变了.
*
* 修饰成员变量的格式: static 数据类型 变量名;
* 修饰成员方法的格式: public static void method(参数){...}

package package02static;public class Person {// 成员变量String name;int age;// 静态成员变量static String country = "中国";// 成员方法public void methodNormal(){System.out.println("普通的成员方法");}// 静态成员方法public static void methodstatic(){System.out.println("静态成员方法");}}

  

* 如何使用static修饰的内容

* 1. 方式一: 使用类名称类访问;* 类名称.成员变量* 类名称.成员方法();

 

* 2. 方式二: 使用对象名访问;(不推荐的)* 对象名.成员变量* 对象名.成员方法();

* 注意点:

* 被static修饰的内容属于类的一部分,应该使用类名称访问
* 静态的内容和非静态的内容如何进行相互之间访问的问题:
* 1. 被static修饰的内容,可以理解成先人(随着类的加载而存在)
* 2. 非static修饰的内容, 可以理解成后人(随着对象的创建而存在)
*
* 特点:
* 1. static修饰的方法不能访问普通内容(非static修饰); 先人(李世明)不知道后人(习*平)
* 2. 非static方法,可以访问静态内容; 后人知道先人
如:

public class Person {String name;static int num;public void methodNormal(){System.out.println(name);System.out.println(num);methodStatic();}public static void methodStatic(){// static修饰的方法不能访问普通内容(非static修饰); 先人(李世明)不知道后人(习*平)//System.out.println(name);//methodNormal();}}

  

(注意:) 1.被static修饰的方法可以看做是工具类

2.而被static修饰的变量可以被其他类共享
3.被final static修饰的变量可以看做为全局常量(因为值是共享的,且值是不变的)

(注意(难理解):)被static修饰的方法与不被static修饰的方法的区别:
类名.方法() 这是静态方法独有的方法调用格式,(静态的方法的调用:直接类名.方法名 )
如果在getFight方法中不加static,只能重新创建new对象,再调用方法.

package cn.itcast.test02;/** 使用战士工厂根据传入的参数生产不同的战斗人类(警察和战士),并让能战斗的人类进行战斗,战士战斗前需要武装后再进行战斗提示: 把战斗功能抽取到接口中 ,把战斗人类通用的姓名放在抽象类中; */public class Test01 {public static void main(String[] args) {Man jc = FightFactory.getFight(1);//类名.方法() 这是静态方法独有的方法调用格式Man sd = FightFactory.getFight(2);//向下转型,不能写成new FightFactory.getFight(1);((JingCha)(FightFactory.getFight(1))).zhanDou();//如果在getFight方法中不加static,只能重新创建new对象,再调用方法./*FightFactory f = new FightFactory();f.getFight(1);*/JingCha jc1 = (JingCha) jc;Soldier sd1 = (Soldier) sd;jc1.zhanDou();sd1.zhanDou();}}package cn.itcast.test02;public class FightFactory {public static Man getFight(int i){//如果不加static,main方法会报错.if (i==1) {return new JingCha("张三");}if (i==2) {return new Soldier("王五");}return null;}}

  

* 在多态的体现形式下,访问静态内容和非静态内容的特点:
* 非静态内容:
* 成员变量: 编译看左边, 运行看左边
* 成员方法: 编译看左边, 运行看右边
*
* 静态内容:
* 成员变量: 编译看左边, 运行看左边
* 成员方法: 编译看左边, 运行看左边

public class Demo01StaticVariable {public static void main(String[] args) {// 非静态内容的访问Animal ani = new Cat();System.out.println(ani.name);//张三 编译看左边, 运行看左边 ani.method();// 编译看左边, 运行看右边System.out.println("===========");// 静态内容访问System.out.println(ani.country);// 中国 编译看左边, 运行看左边ani.methodstatic();// 编译看左边, 运行看左边}}package package04static;//动物类public class Animal {String name = "张三";static String country = "中国";public void method(){System.out.println("Animal === method");}public static void methodstatic(){System.out.println("Animal === methodstatic");}}package package04static;//猫类public class Cat extends Animal {String name = "李四";static String country = "美国";public void method(){System.out.println("Cat === method");}public static void methodstatic(){System.out.println("Cat === methodstatic");}}

  

结果:张三Cat === method===========中国Animal === methodstatic

  

 

* 什么是静态代码块呢?

* 被static修饰的代码块称为静态代码块.
* 格式:
* static{
*
* }
*
* 特点:
* 1. 只要静态代码块所在的类被使用(不管以什么样的形式)马上就会执行, 并只会执行一次
* 2. 静态代码块一般可以用来加载驱动驱动信息,比如: 数据库驱动
*
* 构造代码块: 只要创建对象就会执行,一般情况下可以给final成员变量去赋值.还可编写构造方法中共有的代码
* 构造方法: 只要创建对象就会执行, 创建对象的时候调用

package package05staticBlock;/** 面试题: * 说出以下的代码执行的流程;* A-D-E-F-B-C* A-D-B-E-C-F* A-D-B-C-E-F 正确* * 执行流程:* 1. 父类静态代码块* 2. 子类静态代码块* 3. 父类构造代码块 * 4. 父类构造方法* 5. 子类构造代码块* 6. 子类构造方法* * 构造代码块: */public class Demo02StaticPractice {public static void main(String[] args) {new Cat();int a = 10;System.out.println(a);}}package package05staticBlock;//动物类public class Animal {static{System.out.println("A: Animal === 静态代码块");}{System.out.println("B: Animal == 构造代码块");}public Animal(){System.out.println("C: Animal == 构造方法");}public Animal(int a, int b){}public Animal(int a, float b, int c){}}package package05staticBlock;//猫类public class Cat extends Animal {static{System.out.println("D: Cat === 静态代码块");}{System.out.println("E: Cat == 构造代码块");}public Cat(){System.out.println("F: Cat == 构造方法");}}

  

 

转载于:https://www.cnblogs.com/zennon/p/8127918.html

你可能感兴趣的文章
Spring CommonsMultipartResolver 上传文件
查看>>
Settings app简单学习记录
查看>>
SQLAlchemy
查看>>
多线程
查看>>
使用缓存的9大误区(下)转载
查看>>
appium键值对的应用
查看>>
MyEclipse 8.X 通用算法
查看>>
selenium.Phantomjs设置浏览器请求头
查看>>
分布式数据库如何选择,几种分布式数据库优缺点一览
查看>>
BZOJ 4443: 小凸玩矩阵【二分图】
查看>>
苹果 OS X制作u盘启动盘
查看>>
Jquery便利对象
查看>>
MVC: Connection String
查看>>
idea常用设置汇总
查看>>
Node.SelectNodes
查看>>
Lambda表达式语法进一步巩固
查看>>
Vue基础安装(精华)
查看>>
Git 提交修改内容和查看被修改的内容
查看>>
PAT - 1008. 数组元素循环右移问题 (20)
查看>>
请求出现 Nginx 413 Request Entity Too Large错误的解决方法
查看>>