static

GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在G

十年热恋 提交于 2020-03-20 10:28:44
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点: inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了。所以inline关键字不应该出现在函数声明 中,没有任何作用不说,有时还可能造成编译错误(在包含了sys/compiler.h的情况下,声明中出现inline关键字的部分通常无法编译通 过); inline 关键字仅仅是建议编译器做内联展开处理,而不是强制。在gcc编译器中,如果编译优化设置为-O0,即使是inline函数也不会被内联展开,除非设置了强制内联(__attribute__((always_inline)))属性。 1. GCC 的 inline gcc对C语言的inline做了自己的扩展,其行为与C99标准中的inline有较大的不同。 1.1. static inline GCC 的static inline定义很容易理解:你可以把它认为是一个static的函数,加上了inline的属性

const、static关键字

旧巷老猫 提交于 2020-03-20 08:02:34
3 月,跳不动了?>>> 最近一直在迷惑着这两个关键字,感觉大脑里一片糊涂,特此整理一下: 一、const 1、数据常量,不能修改,必须初始化; 1)非类的数据成员 a、指向const对象的指针(remember) b、const指针(remember) 2)作为类的数据成员 a、必须在构造函数中进行初始化,并且必须在初始化列表中进行初始化; 引申:必须对任何const或引用类型成员以及没有默认构造函数的类类型的额任何成员使用初始化式; 2、const成员函数 作为类的const成员函数,const关键字放在函数声明的后面,在函数定义时,也必须将const关键字放在函数的后面(对于static不是这样)。 1)设计const成员函数主要是不改变对象,正因为这样一个const成员函数不可能再声明为static,因为static加在成员函数上就表明该函数属于类而不属于类对象; 2)const成员函数可以被const对象或者非const对象调用,当被const对象调用时,函数中的this指针就变成了一个指向const对象的const指针(因为this指针本书就是一个const指针,它就是指向调用该函数的对象); 二、static 静态的; 1、对于对象进行修饰 1)对于全局变量加上static关键字后其存储位置没有变,还是在全局存储区,但是缩小了其作用域,生命周期也没有变; 2

排序

房东的猫 提交于 2020-03-20 01:11:04
方法: 1.public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。 2.public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。 3.public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。 4.public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序。 代码: 1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.List; 5 6 public class CollectionsDemo { 7 public static void main(String[] args) { 8 List<Integer> list = new ArrayList<>(); 9 list.add(1); 10 list.add(2); 11 Collections.addAll(list,3,4,5,6,7,8,9)

抄写原生项目_day01

左心房为你撑大大i 提交于 2020-03-19 19:12:09
3 月,跳不动了?>>> 记录开发过程以及抄录改写的有意义原生代码(能记录多少是多少,以及当前认知范围内认为正确的东西) 登陆模块 设想:原生servlet编写相关接口,项目会模仿spring的扫描注入,原生JDBC,使用redis存储token 首先idea创建项目maven web project,项目名door,jdk1.8 ,应用服务器tomcat 9 复习一下web项目的流程: 1.应用服务器加载web.xml的context-param 以及 listener 模仿spring容器,先写一个conetxt-param ,context : application-context.xml 接下来实现ServletContextListener,该listener会在应用启动以及死亡的时候调用对应需要的实现方法 在初始化阶段把类似于spring 容器的我命为CONTEXT的一个单例对象进行实例化 @Override public void contextInitialized (ServletContextEvent servletContextEvent) { // 获取容器配置并初始化 ServletContext servletContext = servletContextEvent.getServletContext() ; String

Thinking in Java -- 类型信息RTTI

喜夏-厌秋 提交于 2020-03-19 00:14:26
Thinking in Java – 类型信息 个人感觉 java 中的比較难的部分了,在看了些netty源代码发现事实上这块很实用。 这章重点是RTTI和反射。先说下自己的理解 RTTI是执行时识别。在c++中是用virtual来实现的,在编译期会忽略对象的详细类型信息,假定我们已经知道,并在执行时详细识别。 Java反射机制实在执行状态中,对于随意一个类,都能够知道这个类的全部属性和方法。对于随意一个对象。都能够调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对 象的方法的功能称为Java的反射机制 Class对象 Class对象就是用来创建类的全部的“常规”对象的。Java使用Class对象来执行其RTTI. Class对象是什么 Java是一门纯面向对象的语言。在Java中,一切都是对象,也就是class,对于每一个类文件(每一个对象)编译后我们都会生成一个.class文件(javac hello.java —> hello.class)。*.class文件就是Class对象,在我们要第一次使用hello这个类文件时。JVM的类载入器会来载入hello.class文件,感觉Class对象就是一个模具。用来生产对象的。 注意:构造器也是静态方法 样例: package onefour_chapter; /** * Created by wwh on 15-8-7.

线程的运行原理

别说谁变了你拦得住时间么 提交于 2020-03-18 22:50:03
一、栈与栈帧 Java Virtual Machine Stacks (Java 虚拟机栈) 我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法 二、运行过程 public static void main(String[] args) { method1(10); } static void method1(int x) { int y = x + 1; Object m = method2(); System.out.printf(m.toString()); } static Object method2() { Object n = new Object(); return n; } } 1.将编译好的字节码加载到jvm的方法区内存中 2.jvm启动一个main的主线程,cpu核心就准备运行主线程的代码了, 给主线程分配自己的栈内存【args、局部变量、返回地址、所记录】,每个线程的栈里面还有个程序计数器 程序计数器的作用:当cpu要执行哪行代码了,就去这个里面去要 3.把主方法的里面代码行放到程序计数器 4.主方法调用的是method1的方法

static修饰符

☆樱花仙子☆ 提交于 2020-03-18 19:29:49
static关键词:   用static声明的成员变量为静态成员变量,或者叫做:类属性,类变量。     它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显示初始化。     对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享。     可以使用“对象.类属性”来调用,不过一般都是用“类名.类属性”。     static变量置于方法区中   用static声明的方法为静态方法。     不需要对象,就可以调用(类名.方法名)     在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。 ===================================================================== static的基本规则:   1.类中的静态方法不允许调用非静态的属性和方法,只可以调用静态的属性和方法   2.可以用类名直接调用静态类中的属性和方法   3.静态方法中不允许出现this和super   4.静态方法不能被非静态方法覆盖   5.构造方法不允许声明static   6.静态变量为类变量,可以直接调   7.非静态变量为实例变量,通过实例调用 来源: https://www.cnblogs.com/zhou-xian-sheng/p/12519378.html

java 内部类

心不动则不痛 提交于 2020-03-18 18:02:05
内部类的访问规则:   1.内部类可以直接访问外部类中的成员,包括私有。     之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式:外部类.this   2.外部类要访问内部类,必须建立内部类对象。   3.内部类在成员位置上,就可以被成员修饰符所修饰,比如private:将内部类在外部类中进行封装,static:内部类具有static的特性。 public class InnerClassDemo { public static void main(String[] args) { //访问方法一: Outer outer = new Outer(); outer.method(); //访问方法二: Outer.Inner in = new Outer().new Inner(); in.function(); } } class Outer{ private int x = 4; class Inner{ private int x = 5; void function(){ int x = 6; System.out.println("inner:"+x);//6 System.out.println("inner:"+this.x);//5 System.out.println("inner:"+Outer.this.x);//4 } }

面向对象 三 (三大特性)

可紊 提交于 2020-03-18 07:47:39
封装,继承,多态 一: 了解什么是封装: 就象一个盒子,你不需要知道里面有什么东西,只知道它有那些用处就行,能够为你提供相对应的方法. 封装的意义: 封装的意义在于保护或者防止 代码 (数据)被我们无意中破坏。 保护成员属性,不让类以外的程序直接访问和修改; 隐藏方法细节 关于对象封装的原则: 内聚:内聚是指一个模块内部各个部分之间的关联程度 耦合:耦合指各个模块之前的关联程度 封装原则:隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别 在面向对象方法中,用类来实现上面的要求。用类实现封装,用封装来实现高内聚,低耦合。 1.1 了解访问权限修饰符 所谓访问权限,指的是本类的成员变量、成员方法和内部类对其他类的可见性。 Java一共有四种访问权限,按照权限由大到小分别为public、protected、default和private,如果省略了访问修饰符,那访问权限就是defualt。四种访问权限的含义和权限控制见下面表格: 注意:所谓的访问,有两种方式,直接访问和通过对象访问。 封装代码例: public class House { // 私有化属性 private String cookroom; private String bathroom; private String bedroom; private String parlor; public String

Java create a unique ID for each instantiated object using instance methods instead of class/static methods

倖福魔咒の 提交于 2020-03-17 11:09:24
问题 Quite new to this so I hope I have the terminology in the title right. I am trying to figure out how to create an instance method that will do the following: --An ID number is returned. --As each object is created from the class constructor(instantiated?), a unique integer ID number is assigned to it. The first ID number is 1, and as new objects are instantiated, successive numbers will be assigned. I am able to find examples of class/static methods that do the above however I am unable to