静态函数

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、接口和抽象类的区别 ①、接口

C++ static静态成员函数

时光怂恿深爱的人放手 提交于 2020-03-10 07:59:01
与静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符"∷"。 如Box∷volume( );实际上也允许通过对象名调用静态成员函数,如a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用class a的类型而已。静态成员函数的作用是为了能处理静态数据成员。 可以说,两者的根本区别:**非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。**在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。 假如在一个静态成员函数中有以下语句: cout << height << endl ; //若height已声明为static,则引用本类中的静态成员,合法 cout << width << endl ; //若width是非静态数据成员,不合法 但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如 cout << a . width << endl ; //引用本类对象a中的非静态成员 假设a已定义为Box类对象,且在当前作用域内有效,则此语句合法。 例: #

《写给大忙人看的Java SE 8》——Java8新特性总结

﹥>﹥吖頭↗ 提交于 2020-03-09 05:32:40
阅读目录 接口中的默认方法和静态方法 函数式接口和Lambda表达式 Stream API 新的日期和时间 API 杂项改进 参考资料 回到顶部 接口中的默认方法和静态方法 先考虑一个问题,如何向Java中的集合库中增加方法?例如在Java 8中向 Collection 接口中添加了一个 forEach 方法。 如果在Java 8之前,对于接口来说,其中的方法必须都为抽象方法,也就是说接口中不允许有接口的实现,那么就需要对每个实现Collection接口的类都需要实现一个forEach方法。 但这就会造成在给接口添加新方法的同时影响了已有的实现,所以Java设计人员引入了接口默认方法,其目的是为了解决接口的修改与已有的实现不兼容的问题,接口默认方法可以作为库、框架向前兼容的一种手段。 默认方法就像一个普通Java方法,只是方法用 default 关键字修饰。 下面来举一个简单的例子 public interface Person { //默认方法 default String getName(String name) { return name; } } /////////////////////////////////////////////////////////////////////// public class Student implements Person { }

C++面试题

时光怂恿深爱的人放手 提交于 2020-03-08 08:06:32
语言基础类 1. 指针和引用的区别? (1)指针有自己的一块空间,而引用只是一个别名;  (2)使用 sizeof 看一个指针的大小为 4 字节(32位,如果要是64位的话指针为8字节),而引用则是被引用对象的大小。 (3) 引用必须在定义时被初始化,指针不必; (4)不存在指向空值的引用,但存在指向空值的指针。 2.static和 const的用法,(能说出越多越好)(重点) 首先说说const的用法(绝对不能说是常数) 1.限定变量为不可修改。 2.限定成员函数不可以修改任何数据成员。 3.使用const关键字修饰的变量,一定要对变量进行初始化 下面的声明都是什么意思? const int a; a是一个常整型数 int const a; a是一个常整型数 const int *a; a是一个指向常整型数的指针,整型数是不可修改的,但指针可以 int * const a; a为指向整型数的常指针,指针指向的整型数可以修改,但指针是不可修改的 int const * a const; a是一个指向常整型数的常指针,指针指向的整型数是不可修改的,同时指针也是不可修改的 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

C++中静态数据成员,静态成员函数(static)

笑着哭i 提交于 2020-03-07 10:34:20
类中的静态成员 1. 在类中的静态数据,属于类共享,不属于对象独有 2. 即使没有定义对象,静态成员也是存在的 3. 静态数据成员在类中说明,在类外定义 并且会给他分配内存空间,并初始化( 一经定义则必须初始化) 4. 可以通过对象去访问静态成员,但是这里容易让人产生误解,以为他们是成员变量( 静态成员是被所有对象共享的 所以也可以去修改它) 我们一般通过 类名::静态成员 去访问它们 5. 他的生存周期一直存在于整个程序的生命周期 静态成员的定义 int Class : : a=10; 数据类型+类名+作用域符号+变量名=10; 静态成员函数 1. 静态成员函数属于一个类,而不属于类中的任何对象 2. 静态成员函数的说明和定义与静态数据成员一样,函数可以实现在类体内,也可以实现在类体外 3. 静态成员函数在实现中,可以直接使用静态成员,也可以通过对象来使用非静态成员!! 这里说明,静态成员函数不能是虚函数,不能直接访问非静态成员,因为他是类所有,而不是对象所有 虚函数和静态成员是对象创建的时候才会有的,这里静态成员函数不属于对象,那么也就不能定义为虚函数,更不能使用成员变量 C语言的static和C++static总结: static在C中的用法,对于C++来说是全盘接受的 两者的不同就在于C++中的类使用 C中的static变量其影响不在于作用域,在于其存储方式

《C#高级编程(第6版)》第3章筆記----第3章对象和类型

不羁岁月 提交于 2020-03-06 09:54:13
结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明结构。 类成员----类中的数据和函数称为类的成员. 数据成员包含了类的数据-- 字段、常量和事件。数据成员可以是静态数据(与整个类相关)或实例数据(类的每个实例都有它自己的数据副本)。通常,对于面向对象的语言,类成员总是实例成员,除非用static进行了显式的声明。 函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器(finalizer)、运算符以及索引器。 构造函数是在实例化对象时自动调用的函数。它们必须与所属的类同名,且不能有返回类型。构造函数用于初始化字段的值。 终结器类似于构造函数,但是在CLR检测到不再需要某个对象时调用。它们的名称与类相同,但前面有一个~符号。 给方法传递参数 参数可以通过引用或值传递给方法。在变量通过引用传递给方法时,被调用的方法得到的就是这个变量,所以在方法内部对变量进行的任何改变在方法退出后仍旧发挥作用。而如果变量是通过值传送给方法的,被调用的方法得到的是变量的一个副本,也就是说,在方法退出后,对变量进行的修改会丢失。对于复杂的数据类型

C++ 动态链接 静态链接

痞子三分冷 提交于 2020-03-06 07:51:17
本文主要内容 :什么是动态链接、静态链接?静态链接、动态链接的优缺点是什么? 1. 什么是 静态链接、 动态链接 静态链接:静态链接是由 链接器 在链接时将库的内容加入到可执行程序中的做法。 链接器 是一个独立程序,将一个或多个库或目标文件(先前由 编译器 或 汇编器 生成)链接到一块生成可执行程序。 动态链接(Dynamic Linking):相对于静态链接而言,要等到 程序运行时 再将组成程序的目标文件进行链接的过程。 2.静态链接、动态链接的优缺点 静态链接 优点 : 不同的程序模块可以独立开发和测试,最后链接在一起供用户使用,促进程序开发效率; 缺点 : (1) 浪费空间 这是由于多进程情况下,每个进程都要保存静态链接函数的副本 (2)更新困难 当链接的众多目标文件中有一个改变后,整个程序都要重新链接才能使用心得版本 动态链接 优点 : (1)当系统多次使用同一个目标文件时,只需要加载一次即可,节省内存空间 (2)不同数据间的数据和指令访问都集中在了同一个共享模块,可以减少物理页面的换入换出,增加CPU的缓存命中率 (3)程序升级变得容易 当升级某个共享模块时,只需要简单的将旧目标文件替换掉,程序下次运行时,新版目标文件会被自动装载到内存并链接起来,即完成升级 (4)插件的引入 程序运行时可以动态选择加载的各种模块,即选择插件 (5)加强程序的兼容性

C++11 静态断言(static_assert)

喜欢而已 提交于 2020-03-05 15:23:18
简介 C++0x中引入了 static_assert 这个关键字,用来做编译期间的断言,因此叫做静态断言。 其语法很简单: static_assert (常量表达式,提示字符串)。 如果第一个参数常量表达式的值为真(true或者非零值),那么 static_assert 不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该 static_assert 语句所在行,错误提示就是第二个参数提示字符串。 说明 使用 static_assert ,我们可以在编译期间发现更多的错误,用编译器来强制保证一些契约,并帮助我们改善编译信息的可读性,尤其是用于模板的时候。 static_assert 可以用在全局作用域中,命名空间中,类作用域中,函数作用域中,几乎可以不受限制的使用。 编译器在遇到一个 static_assert 语句时,通常立刻将其第一个参数作为常量表达式进行演算,但如果该常量表达式依赖于某些模板参数,则延迟到模板实例化时再进行演算,这就让检查模板参数成为了可能。 由于之前有望加入C++0x标准的 concepts 提案最终被否决了,因此对于检查模板参数是否符合期望的重任,就要靠 static_assert 来完成了,所以如何构造适当的常量表达式,将是一个值得探讨的话题。 性能方面,由于是 static_assert 编译期间断言,不生成目标代码,因此

创建线程函数,设置静态线程函数

最后都变了- 提交于 2020-03-05 08:24:41
创建线程函数 uintptr_t _beginthreadex( void *security, //线程的安全属性 unsigned stack_size,//线程大小 unsigned ( __stdcall *start_address )( void * ),//线程函数 void *arglist,//线程参数 unsigned initflag,//标识,设置为0,标识立即运行 unsigned *thrdaddr //线程id ); 创建成功,返回一个句柄 如 HANDLE h = (HANDLE)_beginthreadex(0,0,&ThreadAccept,0,0,0); 线程函数ThreadAccept一般设置为全局函数。因为在 unsigned ( __stdcall *start_address )( void * )内是一个普通的函数指针。 但是由于全局函数不方便管理,所以将线程函数作为一个类成员。但是作为类成员后,普通的函数指针无法访问。那我们可以将线程函数设置为静态类成员,即 static unsigned __stdcall ThreadAccept ( void * ); 相当于全局函数,这样在哪个地方都可以访问使用了。 来源: CSDN 作者: weixin_44084204 链接: https://blog.csdn.net/weixin

静态语言与动态语言,强类型语言与弱类型语言

杀马特。学长 韩版系。学妹 提交于 2020-03-05 04:39:08
Dynamic Programming Language (动态语言或动态编程语言) Dynamically Typed Language (动态类型语言) Statically Typed Language (静态类型语言) 动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。 动态类型语言:是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。 所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断): def sum(a, b): return a + b 而静态类型语言的类型判断是在运行前判断(如编译阶段),比如C#就是一个静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中。(idior不知道这能不能回答你对动态语言多态的疑问^_^) 静态类型语言:与动态类型语言刚好相反