成员是对象级别的,访问成员必须用“引用.”,如果用“类名.”访问会报错!如果用空引用访问成员则会发生控空指针异常!

静态是类级别的,访问静态必须用类“类名.”,如果用“引用.”也能访问,但是底层仍使用“类名.”,并不会用到对象,如果用空引用访问静态,也不会报错,因为静态访问与对象无关!

何时使用静态:一般情况下工具类中的方法大部分都是静态方法!

静态方法中无法访问非静态变量。

静态变量和成员变量

解释静态变量诞生的:

如下程序在堆栈中的结构如图,那么每个animal对象中都有一个属性“陆生”,那么将会造成内存空间的浪费,所以可以定义静态变量!

 
如下图,已定义static变量,该变量存放在方法区,属于类级别,所以用类名点访问!
 
什么时候变量声明成静态变量?
如果这个属性所有的对象都有,并且这个属性的值是相同的,则该属性声明成静态的属性。
 
成员变量:创建java对象的时候初始化。一般用getter和setter方法访问和修改!
静态变量:在类加载阶段赋值,并且只赋值一次。一般用类名点访问。
 
public class StaticTest04{
 
public static void main(String[] args){
 
Animal a1 = new Animal("AAA",10);
Animal a2 = new Animal("BBB",11);
 
//如何访问(类名.)
System.out.println(Animal.type);
 
//也可以使用 引用.   此时实质上并没有用到该引用
System.out.println(a1.type);
 
 
Animal a3 = null;
System.out.println(a3.type); //静态变量底层访问的时候一定使用的  类名. 和对象无关,不会出现空指针异常。
 
                空指针异常:空引用访问成员!
 
}
}
 
 
//抽象现实世界中的“陆生”动物
class Animal{
 
//Field
//成员变量(一个对象一份.)
//成员变量在创建对象的时候初始化,并且存储在堆中的每一个对象中。
String name;
int age;
 
//静态变量,被存储在方法区.
//所有的java对象共享这一份。
//所以静态变量是类级别的,使用“类名.”的方式访问.
static String type = "陆生";
 
//Constructor
Animal(String name,int age){
this.name = name;
this.age = age;
}
}
 
 

静态方法和成员方法

/*
static修饰的方法叫做静态方法
 
一般情况下工具类中的方法大部分都是静态方法。
 
静态方法不用创建对象也能直接访问该方法。
 
*/
public class StaticTest03{
 
//成员方法
//成员方法必须使用“引用.”调用
public void m1(){
 
}
 
//静态方法
//可以使用“类名.”方式调用.也可以用“引用.”,即使用的是“引用.”,底层还是用的“类名.”
//静态方法中不能直接访问非静态数据.
//静态方法中不能使用this
public static void m2(){
System.out.println("m2....");
}
 
//入口
public static void main(String[] args){
 
StaticTest03 st = new StaticTest03();
st.m1();
 
m2();
 
//静态的方法按照正规的方式访问:“类名.”
//静态的方法也能用“引用.”访问
st.m2(); //编译阶段检查出st是StaticTest03类型,编译通过,运行的时候,仍然使用 "StaticTest03."的方式访问。
//该方法执行不需要对象。
 
 
//空的引用去访问成员的时候会出现空指针异常。
//m2方法不是“成员”而是静态的。
//所以即使引用是空的,也不会报空指针异常。
StaticTest03 s = null;
s.m2(); 
 
}
 
}

静态语句块和实例语句块

/*    
静态语句块:
               在类加载阶段执行,并且只执行一次,并且是自上而下的顺序执行。
实例语句块:
      每一次调用构造方法之前会执行一次。
      实例语句块执行顺序也是自上而下。
*/
 
public class StaticTest02{
 
//静态语句块
static{
System.out.println("A");
}
 
//实例语句块
{
System.out.println("1");
}
 
 
{
System.out.println("2");
}
 
 
{
System.out.println("3");
}
 
//构造方法
StaticTest02(){
System.out.println("StaticTest02无参数的构造执行!");
}
 
//入口
public static void main(String[] args){
 
//调用构造方法
new StaticTest02();
 
new StaticTest02();
 
new StaticTest02();
}
}
 
 
 
 

7.28.2 static关键字(静态和成员)的更多相关文章

  1. java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。

    /*构造方法是一种特殊的方法,专门用于构造/实例化对象,形式:[修饰符] 类名(){ }构造方法根据是否有参数分为无参构造和有参构造*/public class Dog {               ...

  2. JAVA中的static关键字(静态变量和成员变量)

    static的特点: 1.static是一个修饰符,用于修饰成员: 2.static修饰的成员被所有的对象所共享: 3.static优先于对象存在,因为static的成员随着类的加载就已经存在了: 4 ...

  3. static 关键字 静态属性与方法 -> :: self $this 区别 可见性的关键字区别

    1.声明类属性或方法为静态,就可以不实例化类而直接访问.静态属性不能通过一个类已实例化的对象来访问(但静态方法可以). 2.由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可 ...

  4. 006-对象—— static关键字 静态属性和方法的使用

    <?php /*static()静态属性: */ //静态属性: /*class Model{ private $mysqli; static $config;//数据库连接状态 functio ...

  5. 静态static关键字概述和静态static关键字修饰成员变量

    static关键字 概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的.也就是说,既然属于类,就可以不靠创建对象来调用了 ...

  6. PHP使用static关键字声明静态属性和静态方法

    PHP使用static关键字声明静态属性和静态方法 在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法. 静态属性和静态方法不需要在被类实例化的情况下就可以直接使用. ...

  7. Java:final、static关键字 详解+两者结合使用

    一  final关键字 1) 关于final的重要知识点 final关键字可以用于成员变量.本地变量.方法以及类. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. ...

  8. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  9. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

随机推荐

  1. Android系统--输入系统(十六)APP跟输入系统建立联系_InputChannel和Connection

    Android系统--输入系统(十六)APP跟输入系统建立联系_InputChannel和Connection 0. 核心:socketpair机制 1. 回顾Dispatch处理过程: 1.1 放入 ...

  2. HTML中的行内元素和框元素详解

    定义 传统的块级元素定义中只是说明了在文档流中形成了一个块,在前后加换行,这里有些笼统. 其实框元素是指宏观上的框元素,它包括3种类型:1.本身就是块级元素 2.dispaly被设置为类block 3 ...

  3. C#开发模式——单例模式

    一.单例模式简介 单例模式是为保证一个对象,在程序运行的任何时刻只有一个实例存在,我们把这种实现方式称之为“单例模式”. 二.单例模式的核心 单例类只有一个实例存在 单例类提供一个全局访问点 单例类通 ...

  4. (转)Linux端口nmap和netstat命令

    场景:弄不清楚端口和服务的关系,总觉得这个命令很有用但是还不清楚如何使用 1 linux端口与服务 1.1 安全概述 网络传输安全.操作系统安全.应用软件安全构成了整个网络应用的安全:其中应用软件安全 ...

  5. 【JAVASCRIPT】json 与 string

    1. 互相转换 JSON.stringify(jsonobj) json对象转化为string JSON.parse(string) string转化为json,注意{“name”:"hxy ...

  6. Linux学习笔记--一些错误的记录

    运行linux的时候,输入shutdown -r now命令提示:bash:shutdown is not found.出现这个错误是因为这条命令没有加入到系统的配置文件中,运行命令export PA ...

  7. webIDE 第二篇博文

    这是我做webIDE过程中的第二篇博文,之所以隔了这么长时间没更,因为确实是没有啥进度啊,没什么可写的,现在虽然依然没啥进度,但中途遇到很多坑,这些坑还是有记录下来的必要的. 因个人水平问题,可能有的 ...

  8. 初学django搭建一个通讯录应用

    ---恢复内容开始--- django搭建一个通讯录应用 一.环境介绍 window10 64位 Django-1.5.12 python 2.7 Sqlite3 二.基本安装 python2.7安装 ...

  9. mybatis深入理解之 # 与 $ 区别以及 sql 预编译

    mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...

  10. 在linux环境下安装Node

    liunx安装node的方法 cd /usr/src //node 安装的位置   一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-releas ...