static

JAVA static深入了解

我是研究僧i 提交于 2020-03-04 09:22:40
static关键字: 1)static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享; 2)只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 一、static变量 1、按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。 两者的区别是: 1)对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 2)对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 注:static成员变量的初始化顺序按照定义的顺序进行初始化,static不可以修饰局部变量。 2、所以一般在需要实现以下两个功能时使用静态变量: 1)在对象之间共享值时 2) 方便访问变量时 二、静态方法 1、静态方法的好处就是不用生成类的实例就能直接调用,可以这样理解使用static修饰的成员不再归对象所以,而是属于类 可以理解为是共有的,也就说只要通过类名就可以访问,不需要耗费资源反复创建对象

Java Static 深入理解

笑着哭i 提交于 2020-03-04 09:22:20
static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 需要了解jvm classloader 1、static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。 两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 static成员变量的初始化顺序按照定义的顺序进行初始化。static不可以修饰局部变量; 所以一般在需要实现以下两个功能时使用静态变量: 在对象之间共享值时 方便访问变量时 2、静态方法 静态方法的好处就是不用生成类的实例就能直接调用,可以这样理解使用static修饰的成员不再归对象所以,而是属于类 可以理解为是共有的,也就说只要通过类名就可以访问,不需要耗费资源反复创建对象

Java基础知识1.4 一部分非访问修饰符

北城以北 提交于 2020-03-04 00:10:32
  static: static 是用来申明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝,局部变量不能申明为 static ; 用 static 修饰的方法叫做静态方法,静态方法不能使用类的非静态变量。静态方法是从参数列表得到数据,然后计算这些数据。 package class3; import java.util.Date; public class MainClass { public static int a = 10; public static final String name = "张三"; public static final int b = a; public static void main(String[] args) { //name = "李四"; //此处会直接报错。 a = 20; System.out.println("final修饰的引用变量发生改变 改变的值为"+a); } }    final: final 的引用不能改变,但是 final 修饰的变量的值是可以改变的;此处稍作解释: final 修饰的变量就相当于一个常量,其值是不能改变的,但是当 final 修饰的变量是一个引用变量,那么这个引用变量的地址就不能改变,但是引用变量内部的内容是可以改变的,就像你记住了人家的门牌号,但是你不能确定人家家里面有哪些人

在java 9+版本中,接口的内容

我与影子孤独终老i 提交于 2020-03-03 23:54:27
在java 9+版本中,接口的内容可以有: [ ] :中括号的内容写的可以省略 成员变量其实就是常量,格式: [public] [static] [final] 数据类型 常量名称 = 数据值; 注意: ​ 常量必须进行赋值,而且一反赋值不能改变 ​ 常量名称必须完全大,用下划线进行分隔。 接口中最重要的就是抽象方法,格式: [public] [static] 返回值类型 方法名称(参数列表); 注意:实现类必须覆盖重写类接口所有的抽象方法,除非实现类是抽象类。 从java 8开始,接口允许定义默认方法,格式: [public] default 返回值类型 方法名称(参数列表){ 方法体 } 注意:默认方法也可以被覆盖重写。 从Java 8开始,接口里允许定义静态方法,格式: [public] static 返回值类型 方法名称(参数列表){ 方法体 } 注意:应该通过接口名进行调用。 从java 9开始,接口里允许定义私有方法,格式: 普通私有方法:private 返回值类型 方法名称(参数列表) { 方法体 } 静态私有方法:private static 返回值类型 方法名称 (参数列表){ 方法体 } 注意:private的方法只有接口自己才能调用,不能被实现类或别人使用。 来源: https://www.cnblogs.com/anke-z/p/12405474.html

static和final

寵の児 提交于 2020-03-03 16:57:16
/*--> */ /*--> */ static 可用于修饰变量,方法,代码块儿,内部类 静态变量: static---修饰变量 静态变量,也叫类的变量 随着类的加载而被加载到方法区的静态区中.在静态区中会根据数据类型赋予一个初值。静态变量先于对象的创建而存在,所以可以不用通过实例化对象而访问。当然也可以通过对象来访问,但不提倡这样使用。该类的对象所拥有的静态变量实际上是静态变量在静态区分配的存储空间的地址。 System.in System.out 静态变量可否定义在构造代码块儿中?---不可以. 静态变量可否在构造代码块儿中赋初值---可以。 静态方法: static修饰的方法叫静态方法,也叫类方法,随着类的加载而被加载到方法区的静态区中,注意,是加载到静态区中,而不是执行,只有在调用的时候,会到栈中去执行。静态方法和静态变量一样,也是不依赖于任何该类的对象而存在的,所以能够不实例化对象而直接通过类来调用。虽然可以用对象来调用,但不提倡这样使用。 Arrays.sort(); Arrays.copyOf(); System.arraycopy() Arrays.toString(); 1. 可以将静态变量定义在静态方法中吗?---不可以 2. 能在静态方法中调用本类的非静态的方法或访问成员变量吗?—不可以 3. 静态方法可以被重载吗?---可以 4. 静态方法可以被重写吗?--

Are there any issues with using static keyword in a plain php function?

限于喜欢 提交于 2020-03-03 08:57:47
问题 For example: <?php function get_current_user_id(){ static $id; if(!$id){ $id = 5; echo "Id set."; } return $id; } $id = get_current_user_id(); $id2 = get_current_user_id(); $id3 = get_current_user_id(); echo "IDs: ".$id." ".$id2." ".$id3; ?> //Output: Id set.IDs: 5 5 5 http://codepad.org/jg2FR5ky Thus presumably repeated calls to get the user id just do a simple return of an id still in memory. I don't know if this is idiomatic use of php functions, though. It's kinda like a singleton, except

Are there any issues with using static keyword in a plain php function?

对着背影说爱祢 提交于 2020-03-03 08:57:03
问题 For example: <?php function get_current_user_id(){ static $id; if(!$id){ $id = 5; echo "Id set."; } return $id; } $id = get_current_user_id(); $id2 = get_current_user_id(); $id3 = get_current_user_id(); echo "IDs: ".$id." ".$id2." ".$id3; ?> //Output: Id set.IDs: 5 5 5 http://codepad.org/jg2FR5ky Thus presumably repeated calls to get the user id just do a simple return of an id still in memory. I don't know if this is idiomatic use of php functions, though. It's kinda like a singleton, except

关于main方法为什么要使用 public static void来修饰呢?

回眸只為那壹抹淺笑 提交于 2020-03-03 04:54:30
小伙伴在写Java文件时会不会产生这样子的疑问呢?为什么程序的入口一定要是 public static void main(String args[]) 这个样子的呢?可以将 public 或 static 去掉吗?或者不加参数可以吗?为什么函数的返回的是 void ?有问题,当然得去实践才能得到答案,接下来的内容将为大家解决这些疑惑。 首先将 public 去掉看看运行效果 代码如下: 运行效果图: 从图片可以看到编译通过,但是运行不了,报错了,来分析下原因: 使用 public 修饰主函数的话,可以让其他类来访问这个函数,如果改用其他修饰(如 protected,private ),其他类访问不了该方法。因为Java的程序是通过 Java的虚拟机JVM 来调用的,属于外部调用,所以需要使用 public 修饰,否则虚拟机无法调用。所以 public 不能够去掉。 其次是去掉 static ,看看运行效果。 出现了同样的错误 下面来分析一下原因: 首先因为Java是一门面向编程的语言,除了静态方法可以直接调用之外,其他方法的调用必须通过对象创建的实例来调用,对于主函数来说,是通过 Java的虚拟机 去调用的,属于外部调用,所以 需要 static 来声明该方法是静态方法,可以直接通过类名调用。 然后将 void 改为 int ,让其有返回值。 依旧报错

c语言中static关键字用法详解

拟墨画扇 提交于 2020-03-03 01:35:37
普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。 普通局部变量存储于进程栈空间,使用完毕会立即释放。 静态局部变量使用static修饰符定义 , 即使在声明时未赋初值,编译器也会把它初始化为0 。 且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变 。 static 关键字两种基本用法 static修饰局部变量,成为一个局部静态变量 static修饰局 部变量(静态局部变量)与普通局部变量相比: 静态局部变量作用域与连接属性与普通局部变量一样。 存储类: 静态局部变量分配在data/bss段 , 普通局部变量在栈上 。 生命周期: 因为存储类的不同,静态局部变量的生命周期得到延长了,直到程序结束,而普通的局部变量在函数体执行结束之后就直接回收销毁了,每次执行都会重新分配内存。 所以当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。 示例代码 #include <stdio.h> void test() { int num = 0; //普通局部变量 static int s_num = 0; //静态局部变量 s_num ++; num ++

Java之面向对象

故事扮演 提交于 2020-03-03 00:18:59
6.1 面向过程与面向对象 什么叫面向对象? 面向对象(Object-Oriented,简称OO)就是一种常见的程序结构设计方法。 面向对象思想的基础是 将相关的数据和方法放在一起 ,组合成一种新的复合数据类型,然后使用新创建的复合数据类型作为项目的基础。 面向对象是一个很抽象的概念,它相对面向过程而言。 过程与对象都是一种解决问题的思想。 面向过程:强调的是功能行为 ,面向过程就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可 ,也就是一种过程, 先干啥, 再干啥; 面向对象:将功能封装到对象里,强调的是具备某功能的对象; 面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为 按照面向对象的思想,可以把任何的东西看做对象! 面向过程和面向对象一定是互斥的吗 ?肯定不是 我们在处理问题时可以完全的面向过程 但是不能完全面向对象。举个例子来说: 你让女朋友做饭 你这个角度而言 面向对象 从女朋友这个角度而言呢?如果GF做 面向过程;如果GF不做 叫外卖 面向对象 从餐馆这个角度而言呢?应该是要做饭 面向过程;如果餐馆不做 可以叫别家餐馆做 .....别的餐馆都不做 这个饭始终没人做 相互踢皮球 从中可以看出什么 这个事最终要被处理-面向过程 所以