静态变量

java基础学习笔记一

我的梦境 提交于 2020-01-15 05:39:33
一、JAVA访问控制修饰符 用于控制类中成员的可见性 1、public(公有):在任何地方可以访问 2、protected(受保护的):子夫类(即使字父类不在同一包)和本包中可以访问 3、default(默认):默认权限,不用写的。在同一包内访问 4、private(私有):只能在同一类中访问 最终总结,就一句话:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。 default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。 protected属于子类限制修饰符,而default属于包限制修饰符。 注意: 如果一个类使用public修饰,那该类的类名必须与他所在的源文件名相同。一个.java源文件中有且只有一个public类,顶层类只能用public和默认修饰符(即无修饰符)修饰。 二、JAVA非访问修饰符 为了实现一些其他的功能,Java 也提供了许多非访问修饰符。 static 修饰符:用来修饰类方法和类变量 静态方法: static 关键字用来声明独立于对象的静态方法 静态方法不能使用类的非静态变量 静态方法从参数列表得到数据,然后计算这些数据 静态变量: static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象

Java基础----------内部类

冷暖自知 提交于 2020-01-14 23:14:02
Java中的几种内部类 一、内部类种类 成员内部类 、局部内部类、 静态内部类 、匿名内部类 二、使用内部类的好处 利用内部类可以实现双继承,内部类加外部类包装可隐藏不想让人知道的内容即加强封装 三、成员内部类 定义在一个类的内部的,与成员同等级的 成员内部类中 不允许定义静态变量 ,一般定义的时候权限为 缺省的 可以之间访问 外部类的所有成员 ,当所访问的成员跟内部类中定义的成员名字一样时要 外部类.this.名字 这样访问 可以访问外部类的所有方法,但是静态方法的访问要使用静态的访问方式即 类名.方法名 外部类不能之间访问内部类的成员,只能利用 内部类对象 来进行访问 在外部类的 非静态方法 中创建成员内部类对象的时候,直接new 成员内部类即可;如 内部类 变量 = new 内部类() ; 对于在 其他位置(静态方法,main方法和同包其他类中等) 创建内部类对象时要利用外部类对象才能进行创建;如 外部类.内部类 变量 = 外部类对象.new 内部类() ; 注意在其他包中不能利用这语法来创建成员内部类,因为这关于内部类中权限问题 四、静态内部类 定义在类内部的并使用 static关键字 修饰的类 可以定义 静态变量 ,权限有四种但一般为缺省的 静态内部类 只能访问外部类的静态成员 ,注意不能访问非静态成员(成员包括变量和方法),访问静态变量的时候如果同名要使用类名来说明

JAVA中的static方法

不想你离开。 提交于 2020-01-14 11:42:08
  static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。   被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区或者方法区内找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。   用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。   static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。   static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:   类名.静态方法名(参数列表...)   类名.静态变量名   用static修饰的代码块表示静态代码块,当Java虚拟机

程序员写了一个新手都写不出的低级bug,被骂惨了。

假装没事ソ 提交于 2020-01-14 11:33:29
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)。 也有好几个号主发来问候,直接实名羡慕哈哈,丙丙以后也是被微信推荐过的男人了,你们也是有牌面的读者了。 前言 你们是不是以为丙丙这么忙了,肯定不会写技术文章给你们看了? 丙丙暖男来的,不过说实话年前估计是没啥时间写技术文章了,上周末两篇你们也看到了,不是年会就是首脑峰会,实在很忙。 这周也是一样,我们年底了项目也赶,我今天一列下个Q的计划,我的个乖乖,平均三天一个需求,什么鬼啊。 而且周四又有技术部的年会,我还是视频的导演(打杂仔哈哈),肯定需要确认很多细节,到时候我应该还可以周末水一篇给你们看(剧透下那一期会有我女神入镜)。 下周周二我就坐车回家了,打工仔回家过年了,我也叫我妈把我要回家的消息放出去了,估计媒人这会已经在路上了,到时候相亲我又可以水文章了,过年素材也好多呀,开心。 这一篇主要说一下我之前的一个很愚蠢的bug,本来只打算让他呆我笔记里面的,但是还是忍不住想要分享出来,让大家避免这种低级错误

c++ 线程局部变量thread_local

僤鯓⒐⒋嵵緔 提交于 2020-01-14 10:53:13
Linux 中的线程局部存储(一)   本章节转自: https://blog.csdn.net/cywosp/article/details/26469435   在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到一定的提高。   那么对于那些系统不支持原子操作的自定义数据类型,在不使用锁的情况下如何做到线程安全呢?本文将从线程局部存储方面,简单讲解处理这一类线程安全问题的方法。 一、数据类型   在C/C++程序中常存在全局变量、函数内定义的静态变量以及局部变量,对于局部变量来说,其不存在线程安全问题,因此不在本文讨论的范围之内。全局变量和函数内定义的静态变量,是同一进程中各个线程都可以访问的共享变量,因此它们存在多线程读写问题。   在一个线程中修改了变量中的内容,其他线程都能感知并且能读取已更改过的内容,这对数据交换来说是非常快捷的,但是由于多线程的存在,对于同一个变量可能存在两个或两个以上的线程同时修改变量所在的内存内容,同时又存在多个线程在变量在修改的时去读取该内存值,如果没有使用相应的同步机制来保护该内存的话,那么所读取到的数据将是不可预知的

java类中的static成员变量和static方法简单介绍,持续补充

萝らか妹 提交于 2020-01-14 10:12:24
一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用。   2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员; 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量   2. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量   3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法 注: 静态方法是属于类的,内存必须为它分配内存空间,这个空间一直由静态方法占用,内存管理器不会由于静态方法没有被调用而将静态方法的存储空间收回,这样如果将所有的方法都声明为静态方法,就会占用大量的内存空间,最后是系统变慢。而普通的成员方法是由对象调用的,内存并不会一直为起分配内存,只有调用的时候才为其分配存储空间,而当其没有被调用时,存储空间就会被内存管理其收回,释放没有用的空间,提高的系统的运行速率 三.初始化块和静态初始化块 1.为什么要有初始化?   答:初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块初始化了     好处是可以提高初始化块的复用,提高整个应用的可维护性  2

Java学习笔记

回眸只為那壹抹淺笑 提交于 2020-01-13 21:02:16
为什么JAVA文件中只能含有一个Public类?    java 程序是从一个 public 类的 main 函数开始执行的,(其实是main线程),就像 C 程序 是从 main() 函数开始执行一样。 只能有一个public 类是为了给类装载器提供方便。 一个 public 类只能定义在以它的类名为文件名的文件中。   java因强制要求类名(唯一的public类)和文件名统一,因此在引用其它类时无需显式声明。在编译时,编译器会根据类名去寻找同名文件。 java import package (不同与Python) import java.io.*;   package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到 ./aaa/bbb/ccc/ 这个目录。   import 是为了简化使用 package 之后的实例化的代码。假设 ./aaa/bbb/ccc/ 下的 A 类,假如没有 import,实例化A类为: new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直接使用 new A() 了

【java】static关键字

二次信任 提交于 2020-01-13 19:01:43
1.static关键字 1.1静态变量 传统属性所具备的特征:保存在内存中,且每个对象独享属性。 在定义一个类时,只是在描述某类事物的特征和行为,并没有产生具体的数据。只有通过new关键字创建该类的实例化对象后,系统才会为每个对象分配空间,存储各自的数据。有时候,我们希望某些特定的数据在内存中只有一份,而且能够被一个类的所有实例对象所共享。例如某个学院所有学生贡献同一个学生名称,此时安全不必在每个学生对象所占用的空间中都定义一个变量来表示学生名称,而可以在对象以外的空间定义一个表示学校名称的变量让所有对象来共享。 在一个java类中,可以使用是static关键字来修饰成员变量,该变量被称作静态变量。静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问。static属性又称为类属性,保存在全局数据的内存之中,所以对象都可以进行数据区的访问。 class Student{ static String schoolName; } public class Test { public static void main(String[] args) { Student stu1=new Student(); Student.schoolName="学校"; System.out.println(stu1.schoolName); System.out.println(Student

spring动态获取bean

允我心安 提交于 2020-01-13 16:32:00
在实际的项目中,在使用spring注解的方式管理bean时,只能通过注解或者配置文件注入的方式获取相应的bean。但是在某些特殊情况下,我们需要在一个普通的JAVA类中获取由spring所管理的bean,一下是解决方法,实现接口ApplicationContextAware。 package com.example.demo.service; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service;

温故知新_java基础_静态加载

六月ゝ 毕业季﹏ 提交于 2020-01-12 15:11:20
一,java静态变量 1)java 静态变量定义的同时必须初始化。 2)静态变量的定义 static 数据类型 变量名=初始值; 3)静态变量不能用this调用,非静态变量可以用this调用。 4)静态变量只属于当前类,不能继承;非静态变量可以继承,可以在子类重新赋值。 5)静态变量可以在非静态方法中调用赋值 6)类实例时先加载静态变量 7)类多次实例化时整形静态变量可以支持累加 二,静态方法块 static{ 方法体 } 静态方法块中不包含this,以及非静态方法和非静态变量,只包含静态变量,静态方法; 类调用顺序: 类静态变量->类静态方法块->类构造函数 三,静态方法 权限标识符 static 返回值类型 方法名() { 方法体 } 静态方法中不包含this,以及非静态方法和非静态变量,只包含静态变量,静态方法 静态方法调用可以类名直接调(类静态变量->类静态方法块->类静态方法), 也可类实例后,实例名调用(类静态变量->类静态方法块->类构造函数->类静态方法) 三,父类子类都包含静态方法块的加载顺序 (父类加载静态变量->父类静态方法块->子类静态变量->子类静态方法块->父类构造函数->子类构造函数) 最后理论指导实践,看到此篇的码农们,理论对不对,敲敲就知道!大家来敲吖,很好玩哒! 来源: CSDN 作者: 爱哭 链接: https://blog.csdn.net