静态变量

java中static(静态方法,静态变量)的使用

走远了吗. 提交于 2019-12-26 23:16:07
1.一旦使用Static修饰成员方法,那么这就成为了静态方法.静态方法不属于对象为属于类. 2.如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它. 3.如果有了static关键字,那么不需要创建对象就能通过类名称来使用它. 静态方法与非静态方法的区别: 静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被 装载和分配 。而非静态方法是不加static关键字的方法,在类定义时 没有占用内存 ,非静态方法只有在类被实例化成对象时,对象调用该方法才被分配内存; 无论是成员变量,还是成员方法.如果有了static,都推荐使用类名成进行调用 静态变量:类名称.静态变量 静态方法:类名称.静态方法() / / 对于本类的静态方法,可以省略类名称 静态变量图非静态变量的区别: 类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期 而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。 注意事项: 1.静态不能直接访问非静态. 原因:因为内存当中是先有静态内容,后有的非静态内容 2.静态方法当中不能用this 原因:this代表当前对象,通过谁调用的方法

构造函数与静态方法

流过昼夜 提交于 2019-12-25 19:43:26
一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。 注意事项: 如果你没写无参构造方法 系统会给你提供一个无参构造方法 如果只写了有参的构造方法 这时系统不再提供 无参构造方法 写类的时候 建议 无参有参构造方法一起写 代码举例: public class Demo01 { public static void main (String[] args) { Car car = new Car(); car.name = "保时捷" ; car.num = 911 ; car.sayHi(); //使用有参构造方法创建对象 Car car2 = new Car( "比亚迪" , F10); System. out .println(car2.name + " " + car2.num); //在赋值成员变量时 使用哪种方法好? set方法 和 有参构造方法 //具体看情况 大多使用set方法 } } class Car{ String name; int num; // 构造方法的重载:只跟参数有关 //无参 构造方法 public Car () { System. out .println( "我是无参的构造方法" ); } //有参 构造方法 public Car (String name, int num)

Java设计模式-单例模式

有些话、适合烂在心里 提交于 2019-12-24 07:10:43
为什么要使用单例模式 实际开发中,为了节约系统资源,有时需要确保系统中某个类只有唯一的一个实例,当这个唯一实例创建成功后,就无法再创建一个同类型的其它对象,所有的操作都只能基于这个唯一实例。为了确保实例的唯一性,可以通过单例模式实现。 最简单的单例类设计 public class Single { // 设置instance为静态变量 private static Single instance = null; // 构造方法私有化 private Single() {} // 静态方法-实例化对象 public static Single getInstance() { if (instance == null) { // 实例化对象 instance = new Single(); } return instance; } public static void main(String[] args) { // 通过getInstance()方法获取实例 Single instance1 = Single.getInstance(); // 通过getInstance()方法获取实例 Single instance2 = Single.getInstance(); // 判断两个对象是否相同,相同则表示获取的是同一个实例,否则不是 System.out.println

成员变量的初始化顺序

試著忘記壹切 提交于 2019-12-23 02:21:58
我个人理解 初始化分为五个主要部分(不考虑 编译期常量什么) : 静态代码块 非静态代码块 静态变量初始值 非静态变量初始化值 系统默认初始化变量值 这里说的 变量初始值 是指: int a=3; 这种人为的 不是jvm自动给变量赋初值那种 静态部分: 顺序:静态代码块 >静态变量初始化值 非静态部分: 顺序: 非静态代码块> 非静态变量初始化值 排在最后面的就是 系统默认初始化变量值 example(需要注意下面变量 c 的值的变化): public class Ming extends User { static { System.out.println("我是静态初始化块(只执行一次 就是类加载时)"); a=2; } { System.out.println("我是非静态初始化块(创建类就会执行)"); b=4; c=4; } public static int a=1; public int b=3; public int c; } public class Persistence { public static void main(String[] args) { Ming ming = new Ming(); System.out.println(ming.a); System.out.println(ming.b); System.out.println(ming

Java标识符的命名规则

橙三吉。 提交于 2019-12-22 12:29:30
一. Java标识符的命名规则 Java语言中,为各种变量、方法和类等起的名字称为标识符 Java标识符的命名规则: 应以字母、下划线、美元符开头 后跟字母、下划线、美元符或数字 Java标识符大小写敏感,长度无限制 1.java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$。 但是不能以数字开头。 2.类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。 3.方法名一般首个字母小写(构造方法例外),多个单词组成方法名,后面单词首字母大写。 4.变量命名规则同方法名名。 注意:不能使用java中的关键字做标识符。 Java保留关键字 Java语言有51个关键字,其中const和goto虽然被保留但未使用。你不能使用保留关键字来命名类、方法或变量。 Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 关于 Java 标识符,有以下几点需要注意: 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合 关键字不能用作标识符 标识符是大小写敏感的 合法标识符举例:age、$salary、_value、__1_value 非法标识符举例:123abc、-salary 二.java修饰符

数组的简单使用

只愿长相守 提交于 2019-12-21 13:47:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 什么是数组 数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的 2. 数组的使用场合 一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢? 第一种方法是定义很多个int类型的变量来存储 第二种方法是只需要定义一个int类型的数组来存储 3. 数组的特点 只能存放一种类型的数据,比如int类型的数组只能存放int类型数据 数组中存放的每一个数据称为“元素” 元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始 数组的定义、初始化、使用 数组的定义 元素类型 数组名[元素个数]; 比如:int ages[10]; 数组的初始化 一般会在数组定义的同时进行初始化 int ages[3] = {4, 6, 9}; 数组元素的访问 通过下标(索引)访问:ages[0]=10; int a = ages[2]; C程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)

java学习笔记(基础篇)—关键字static和final

十年热恋 提交于 2019-12-21 04:28:21
一、关键字Static 我们从关键字static可以修饰哪些东西入手,逐一的剖析static的使用和要注意的地方。 1)修饰变量(只能修饰实例变量)----->静态变量 又称为类变量 a)所有类实例共享 b)使用静态变量 类名.变量名 c)静态变量是属于这个类,非静态变量是属于对象 d)代码加载到内存静态变量就已经存在了 e)static变量和实例变量的区别: i)static变量对于每个类而言在内存中只有一个,能被类的所有实例所共享; 实例变量对于每个类的每个实例都有一份,它们之间互不影响; ii)Java虚拟机在加载类的过程中为static变量分配内存, 实例变量在加载完类后创建对象时分配内存; iii)static变量存在方法区,实例变量存在堆区; v)static变量可以直接通过类名访问, 实例变量通过引用类型变量访问; 2)修饰方法====>静态方法 称为类方法 a)调用时使用 类名.方法名(); b)静态方法不能使用非静态的变量 静态方法在类加载的时候就存在了 非静态变量在对象创建的时候才存在的 非静态方法可以访问静态变量 c)静态方法不能被非静态方法重写,静态方法不能被静态方法重写(总之就是不能被 重写) d)静态方法用来表示某个类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。既然如此,当前类必须为静态方法提供实现。静态方法属于类。 e

JAVA日常之三

一笑奈何 提交于 2019-12-20 15:47:54
一、Main 方法的args 参数 args[] 是程序运行前可传入的参数,比如 java HelloWorld a,那么在HelloWorld的main方法里面 args就是{"a"},多个的话用空格隔开,比如java HelloWorld a b c,那么在HelloWorld的main方法里面 args就是{"a", "b", "c"}。 多数情况下,该参数不被使用,但是 java规定main方法里必须传入这样一个字符串数组,名称随意。 二、循环体内声明变量 一般情况下,对于生命周期只限于循环体的变量,可直接在循环体内声明,这并不很影响内存效率。首先,Java的垃圾回收功能(GC)已经非常完善,每次循环声明创建的变量,在本次循环结束之后即会被标记为“可以被GC回收了”。其次,在循环体外声明变量,人为地将变量的生命周期拉长了,并且循环结束后GC不能及时判断其可回收性,从而进行回收。 三、伪随机数 真实随机数只存在于真实世界物理现象中,如抛硬币、转盘等。在计算机编程中,由程序生成的随机数都是“伪随机数”,是由一个随机“种子值”,经过一定的算法计算出来的,所以,只要随机种子一定,计算方法一定,产生的随机数就是固定的。 只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。因为时钟是在不断变化的,经过一定的算法计算,达到“随机”的效果。 通常情况下

JVM富有争议的观点总结以及一些概念理解

怎甘沉沦 提交于 2019-12-20 04:04:25
JVM富有争议的观点总结以及一些概念理解 JVM表现根据JDK版本不同具有一定的差异 JVM常量池,静态变量等存储的位置与内存图表示 内存泄露与内存溢出 JVM表现根据JDK版本不同具有一定的差异 JVM常量池,静态变量等存储的位置与内存图表示 常用的JDK版本JDK1.7与JDK1.8具有无论是1.8新增optional包装类,lamda表达式,Stream类等流式编程还是JVM的内存内存模型都有较大区别,很多人还是无法区分常量池的位置和静态变量存储的位置,下面本人抛砖引玉介绍下自己的观点(研读深入理解java虚拟机): JDK1.7内存模型 (图片来源于网络) 这与<<深入理解java虚拟机>>第二版内存模型是吻合的,标准的1.7版本,此时的 常量池,静态变量 位于方法区(同时还包括类信息,编译器编译后的代码等数据),java规范中把方法区描述为堆的一个逻辑部分,但是跟堆是隔离开的,值得一提的是还有一个点:堆内存细分可划分为新生代和老年代,并不包括持久代,持久代存在于方法区中,可以通过参数-XX:MaxPermSize,-XX:PermSize控制其大小; JDK1.8内存模型 (图片来源于网络) JDK1.8以后, 持久代 被移除掉,取而代之的是元空间,无论是持久代或者是元空间都是对方法区的具体实现,方法区是JVM规范中的概念,最大的区别是元空间使用的是本地内存(系统内存)

静态变量与静态方法

夙愿已清 提交于 2019-12-19 16:07:52
static的用法 static可以用于修改成员变量,表示静态的成员变量,用于修饰方法表示静态方法。 静态成员变量和静态方法都是类所有,所有对象都共享。 调用静态成员变量和静态方法时,可以通过 类 名直接调用,也可以通过 对象 的方式调用。 public class Peace { public static String name ; //创建静态变量: 修饰符+static+类型+变量名; //注意,局部变量不能定义成静态的,会直接报错; public static void method ( ) { //创建静态方法 System . out . println ( "aaaa" ) ; // public static int a=0; //错误的定义静态的局部变量 } public static void main ( String [ ] args ) { method ( ) ; System . out . println ( name ) ; //通过类名直接调用静态方法和静态成员变量 Peace . method ( ) ; System . out . println ( Peace . name ) ; //通过对象调用静态方法和静态成员变量 Peace peace1 = new Peace ( ) ; //创建对象 peace1 . method ( )