static

C++基础之static(静态)变量

巧了我就是萌 提交于 2020-03-12 11:43:07
static 表示静态 作用: 1、在函数体内,静态变量的值维持不变(记忆功能) 2、是一个本地的全局函数,即只能被本模块的函数访问(隐藏功能) static变量: static全局变量和普通全局变量的区别:static变量只初始化一次(即不能重复定义),这样可以防止在其他文件单元中被引用 static局部变量和普通局部变量的区别:static变量值初始一次,下次的运算依据是上一次的值(第二次碰到初始化语句直接跳过即可) static函数: static函数只能在一个源文件中有效,在其他源文件无效 类中的static: 1、无论类对象被定义多少个,静态数据成员始终只有一份,用作共享 2、静态数据成员存储在全局数据区,定义时要分配空间,即使类没有被实例化,静态数据成员也可以被使用 3、遵从public、private、protect访问 4、static的成员函数在类外初始化(类中只是声明,cpp中才是初始化),但此时不要加static关键字 5、static数据成员没有this指针(普通的类成员函数都有),因此不能访问类中的非静态成员函数,只能访问成员函数 优点: 1、不存在全局名字冲突 2、信息可以隐藏,可以为private 注:不要在头文件定义静态变量,不要在头文件定义任何变量 来源: https://www.cnblogs.com/huahua12/p/8495224

JAVA循环打印ABC的多种方式

我们两清 提交于 2020-03-12 08:18:33
1.Condition import java . util . Objects ; import java . util . concurrent . locks . Condition ; import java . util . concurrent . locks . Lock ; import java . util . concurrent . locks . ReentrantLock ; /** * 三个线程循环打印ABC * * @author gaokuo * @since 2020-03-11 13:59 **/ public class PrintABC { private final static Lock LOCK = new ReentrantLock ( ) ; private static int count = 10 ; private static Condition condition = LOCK . newCondition ( ) ; private static String afterPrint = "A" ; @SuppressWarnings ( "all" ) public static void main ( String [ ] args ) { count = 1 ; new Thread ( ( ) - >

Java修饰符

拥有回忆 提交于 2020-03-12 07:46:13
访问权限修饰符 访问级别 同类 同包 子类 不同包 public Y Y Y Y protected Y Y Y N default Y Y N N private Y N N N protected 经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许任何包中的子类访问父类 default (缺省,什么也不写)在同一包内可见,不使用任何修饰符 实际上它限制的范围就是一个包内可以访问。如果不在一个包内,即使继承关系任然是不能访问的。它是针对本包访问而设计的 static static 修饰符,表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 用法:是一个修饰符,用于修饰成员(成员变量,成员函数),当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调,类名.静态成员。 存在:方法区,共享区,数据区(非堆内存、栈内存的另一个存储区),static块仅在该类被加载时执行一次。 特点:随着类的加载而加载,也就是说静态会随着类的消失而消失,说明他的 生命周期最长;优先于对象的存在 ,静态先存在,对象后存在; 被所有对象所共享;可以直接被类名调用。 static变量 ——也称作 静态变量

java学习day10

有些话、适合烂在心里 提交于 2020-03-12 04:52:25
文章目录 接口 接口的定义基本格式 接口的抽象方法定义 接口的抽象方法使用 接口的默认方法使用 接口的静态方法定义 接口的私有方法定义 普通私有方法 静态私有方法 接口的常量定义和使用 接口的内容小结 继承父类并实现多个接口 接口之间的多继承 接口 接口的定义基本格式 接口就是多个类的公共规范 接口是一种引用数据类型,最重要的内容就是其中的抽象方法 如何定义一个接口的格式: public interface 接口名称{ //接口内容 } 备注:换成了关键字interface之后,编译生成的字节码文件仍然是:.java --> .class 如果是java7,那么接口中包含的内容有: 常量 抽象方法 如果是java8,还可以额外包含有: 默认方法 静态方法 如果是java9,还可以额外包含有: 私有方法 接口的抽象方法定义 在任何版本的java中,接口都能定义抽象方法 注意事项: 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract 这两个关键字修饰符,可以选择性地省略 方法的三要素,可以随意定义 public interface MyInterfaceAbstract { // 这是一个抽象方法 public abstract void methodAbs1 ( ) ; // 这也是抽象方法 abstract void methodAbs2 ( ) ;

并发编程-基础篇(二)

北慕城南 提交于 2020-03-11 18:35:59
问题:利用队列+线程手写生产者和消费者? public class Thread1 { static volatile LinkedBlockingQueue<Integer> queue=new LinkedBlockingQueue<>(5); @SneakyThrows public static void main(String[] args) { new Thread(new Productor()).start(); new Thread(new Consumer()).start(); } // 生产者 static class Productor implements Runnable{ @Override public void run() { productor(queue); } @SneakyThrows public static void productor(LinkedBlockingQueue<Integer> queue){ // 有10个待生产的数据 for (int i = 0; i < 10; i++) { synchronized (queue){ // 条件有限 一次只能生产5个 if(queue.size()==5){ // 满了5个 之后 剩余的待生产个数都在等在着被生产 // 在挂起的时候一定要获取到对象锁,没有获取到对象锁会报异常

对Java入口函数的认识

纵饮孤独 提交于 2020-03-11 17:00:40
Java规定了main()方法必须是公共的,以便于外部程序对主方法的访问,因为程序都是从main()方法起始的,并且main()方法也必须是静态的。 首先,为什么要用public: 因为在运行程序时,jvm要调用main方法,但我们都应该知道jvm是一个软件并不是硬件,并且它与main方法所在的包是不同的,所以jvm要调用main方法时,main方法就必须声明为public;否则jvm就无法找到和调用main方法,此时程序就无法运行。 第二,为什么要用static: 因为如果不适用static,就只能创造一个实例去调用main方法,但是jvm并不知道如何去创造一个实例,而你要创造一个实例时,必须要在main方法里头使用new这个关键字,但此时jvm无法调用main方法,所以就无法创造一个实例去调用main方法,所以main方法必须声明为static。很大程度上这是为了安全性的考虑。因为用static修饰的方法或变量是在编译时运行或分配空间的,main用static修饰后,程序就能自动找到程序的main的入口。 第三,为什么要用void: main方法根本就不需要返回值; 如果你返回了值,也不能看到,那此时jvm也不知道拿这个返回值来干什么,所以就用void。 来源: CSDN 作者: qq_39581763 链接: https://blog.csdn.net/qq_39581763

static link:关于gcc连接静态库的几种方式

让人想犯罪 __ 提交于 2020-03-11 08:22:38
开发一个应用程序不可避免要使用多个第三方库(library). 默认情况下,gcc采用动态连接的方式连接第三方库,比如指定-lpng,连接程序就会去找libpng.so。 gcc提供了一个-static参数,可以改变gcc默认的连接方式,GNU官网上关于gcc连接选项的手册《3.14 Options for Linking》中有说明:如下 这个-static选项是个大杀器,指定了这个选项,gcc在连接时对项目所有的依赖库都尝试去搜索名为lib<name>.a的静态库文件,完成静态连接,如果找不到就报错了。这里指的所有是不仅指我们常用的第三方库比如jpeg,png,opencv,zlib,...,还包括gcc编译器自带的库libgcc,libstdc++,libc,libm...,总之就是linux kernal之外的所有库。而且还要包括所有被间接引用的第三方库,比如png这个库在编译时还用到了zlib,那么静态连接png的时候,就要带上zlib的库:-lpng -lz, 这可麻烦大了,要把这些东西全静态连接,这得有多大?呵呵,这事儿我干过,十几兆字节总是有的,取决你的程序用到多少第三方库。 这种全静态连接有啥用处呢?也有用,就是你的程序自带干粮,只需要一个linux kernal就能跑了。 但是实际应用中,我们绝大多数应用场景不需要这么做,即使在嵌入式系统中也不一定必要

C++ static

一曲冷凌霜 提交于 2020-03-11 04:04:05
C++ static static 作用 1、修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。 2、修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。 3、修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。 4、修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。 来源: CSDN 作者: 嫌疑人_X 链接: https://blog.csdn.net/qq_42016124/article/details/104748739

C/C++返回内部静态成员的陷阱

删除回忆录丶 提交于 2020-03-10 14:28:26
在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。 这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,如果你熟悉一些标准库的话,你可以看到许多各式各样的解决方法。大体来说有下面几种: 1)在函数内部通过malloc或new在堆上分配内存,然后把这块内存返回(因为在堆上分配的内存是全局可见的)。这样带来的问题就是潜在的内存问题。因为,如果返回出去的内存不释放,那么就是memory Leak。或者是被多次释放,从而造成程序的crash。这两个问题都相当的严重,所以这种设计方法并不推荐。(在一些Windows API中,当你调用了一些API后,你必需也要调用他的某些API来释放这块内存) 2)让用户传入一块他自己的内存地址,而在函数中把要返回的内存放到这块内存中。这是一个目前普遍使用的方式。很多Windows API函数或是标准C函数都需要你传入一个buffer和这个buffer的长度。这种方式对我们来说应该是屡见不鲜了。这种方式的好处就是由函数外部的程序来维护这块内存,比较简显直观

Java基础知识复习一

为君一笑 提交于 2020-03-10 11:46:40
1、JDK,JRE,JVM三者之间的联系和区别 ①、JVM,即Java Virtual Machine,Java虚拟机 JVM并不能识别.java文件,只能识别.class文件,JVM能识别.class文件中的字节码指令并调用操作系统完成指定的个动作,所以JVM是Java跨平台的核心。 ②、JRE,Java Runtime Environment,Java运行时环境 JRE主要包含2个部分,JVM的标准实现和Java的一些基本类库。相比于JVM,多出来的是一部分Java类库。 ③、JDK,Java Development Kit,开发工具包 JDK是整个Java开发的核心,它集成了JRE和一些好用的小工具,例如:javac.exe,java.exe,jar.exe等。 因此,如果只是部署和运行Java程序,只需安装JRE即可;如果要开发Java程序则需要安装JDK。 2、Java跨平台的原因 跨平台的含义是不依赖于操作系统和硬件环境。Java编译器将Java编译成与平台无关的class字节码文件,然后由JVM执行class字节码文件,该字节码是与平台无关的,是介于源代码和机器指令之间的一种状态,在后续的执行中,JVM将class字节码文件解释成与平台相对应的机器指令,这样既减少了编译次数,又增强了程序的可移植性,因此被称为“一次编译,多处运行!” 3、接口和抽象类的区别 ①、接口