static

C#中使用ref和out一点认识

安稳与你 提交于 2020-04-03 11:51:56
摘自internet ref侧重修改.out侧重输出. 首先,如果不使用这两个关键字,那是什么样 呢? 看下面的例子: using System; class Test {     static void Swap(ref int x, ref int y)     {         int temp = x;         x = y;         y = temp;     }     static void Swap(int x,int y)     {         int temp = x;         x = y;         y = temp;     }     static void Main()     {         int i = 1, j = 2;         Swap(ref i, ref j);         Console.WriteLine("i = {0}, j = {1}", i, j);         Swap(i,j);         Console.WriteLine("i = {0}, j = {1}", i, j);     } }   程序经编译后执行输出: i = 2, j = 1 i = 2, j = 1 这是csdn的一篇帖子上的例子.其实如果放在一起

Java中static和final的区别

心已入冬 提交于 2020-04-03 04:33:53
static 是静态修饰关键字,可以修饰变量和程序块以及类方法: 当定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存; 当修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化; 当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。 final 可以修饰变量、方法及类: 当定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值; 当修饰一个方法时,该方法在子类中将不能被重写; 当修饰一个类时,该类不能被继承。 static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。   2. static方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字

内部类的详解

限于喜欢 提交于 2020-04-02 09:31:52
一般来说,有4中内部类:常规内部类、静态内部类、局部内部类、匿名内部类。 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中。 1.常规内部类中的方法可以直接使用外部类的实例变量和实例方法。 2.在常规内部类中可以直接用内部类创建对象 3.代码如下: public class MyOuter { private int x = 100; // 创建内部类 class MyInner { private String y = "Hello!"; public void innerMethod() { System.out.println("内部类中 String =" + y); System.out.println("外部类中的x =" + x);// 直接访问外部类中的实例变量x outerMethod(); System.out.println("x is" + MyOuter.this.x); } } public void outerMethod() { x++; } public void makeInner() { //在外部类方法中创建内部类实例 MyInner in = new MyInner(); } /** * @param args */ public static void main(String[] args) { MyOuter mo

php利用递归函数实现无限级分类

[亡魂溺海] 提交于 2020-04-01 07:51:31
   递归函数是我们常用到的一类函数,最基本的特点是 函数自身调用自身 ,但必须在调用自身前 有条件判断 ,否则无限无限调用下去。实现递归函数可以采取什么方式呢?本文列出了三种基本方式。理解其原来需要一定的基础知识水品,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解。递归函数也是解决无限级分类的一个很好地技巧。如果对无限级分类感兴趣,请参照 php利用递归函数实现无限级分类 。我习惯套用通俗的话解释复杂的道理,您确实不明白请参见 手册 。   利用引用做参数   先不管引用做不做参数,必须先明白引用到底是什么?引用不过是指两个不同名的变量指向同一块存储地址。本来每个变量有各自的存储地址,赋值删除各行其道。现在可好,两个变量共享一块存储地址。 $a =& $b ; 。实际上指的是 $a 不管不顾自己原来的存储地址,非要和 $b 共享一室了。因而任何对存储地址数值的改变都会影响两个值。     函数之间本来也是各行其是,即便是同名函数。递归函数是考虑将引用作为参数,成为一个桥梁,形成两个函数间的数据共享。虽然两个函数见貌似操作的是不同地址,但是实际上操作的是一块儿内存地址。    function test($a=0,&$result=array()){ $a++; if ($a<10) { $result[]=$a; test($a,$result); }echo

[ Crawler ] 爬虫防屏蔽技巧

这一生的挚爱 提交于 2020-04-01 02:26:17
技巧1 仿真Request(使用随机UserAgent、随机Proxy与随机时间间隔对墙进行冲击) 准备UserAgent array与Proxy array,随机拼对,进行访问。一般情况下,会有 ScrapManager 下面包含 UserAgentManager 与 ProxyManager的一些封装。注意在轮询遍历时候,需要Sleep一定的时间。 Thread.Sleep(Consts.RandInt() * 1000); public class ScrapManager { public static void Load() { ProxyManager.Load(); UserAgentManager.Load(); } public static void Next( ) { ProxyManager.Next(); UserAgentManager.Next(); } } public class ProxyManager { public static string Proxy = " your proxy "; public static void Load() { } public static Next() { } } public class UserAgentManager { public static string UserAgent =

C#在winform中调用系统控制台输出

别来无恙 提交于 2020-04-01 01:21:56
在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示。 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅,发现是可以的,现在就把方法写下了: 主要用到的是win32 API函数实现的: 1 [DllImport("kernel32.dll")] 2 static extern bool FreeConsole(); 3 [DllImport("kernel32.dll")] 4 public static extern bool AllocConsole(); 在Program.cs文件中调用方法即可 完整代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Windows.Forms; 4 using System.Runtime.InteropServices; 5 6 namespace XY.WinformDebug 7 { 8 static class Program 9 { 10 [DllImport("kernel32.dll")] 11 static extern bool FreeConsole(); 12 [DllImport("kernel32.dll")] 13 public

Django静态资源配置

六月ゝ 毕业季﹏ 提交于 2020-03-31 18:43:03
Settings文件设置 INSTALLED_APPS 设置 确保 django.contrib.staticfiles 添加到 INSTALLED_APPS 中 默认是已经添加上的 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book_cms.apps.BookCmsConfig', ] 添加静态文件配置 STATIC_URL = '/static/' //这个的static和下面的static不是同一个概念 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] 文件导入 文件目录如下 HTML文件导入方式一 <link rel="stylesheet" href="/static/css/style.css"> HTML文件导入方式二 {% load static %} }} <--!已经要 在文件头加入这个--》 <link rel="stylesheet" href="{% static 'css

双重检查锁定的缺点与改进

我的梦境 提交于 2020-03-30 12:53:35
双重检查锁定的延时初始化: 1 class DoubleCheckLocking{ 2 private DoubleCheckLocking() {} 3 private static DoubleCheckLocking instance; 4 public static DoubleCheckLocking getInstance(){ 5 if (instance == null){ 6 synchronized (DoubleCheckLocking.class){ 7 if (instance == null) 8 instance = new DoubleCheckLocking(); 9 } 10 } 11 return instance; 12 } 13 } 双重检查锁定看起来似乎很完美,但这是一个错误的优化!执行程序读取到第5行instance不为空时,instance引用的对象可能还没有完成初始化。 程序第8行所做的操作如下:   1:分配对象的内存空间   2:初始化对象   3:设置instance指向刚分配的内存地址 步骤2和3之间可能发生重排序,导致上面的问题。 解决方法:   1:不让2和3重排序   2:允许2和3重排序,但不允许其他线程“看到”这个重排序。 解决方案1:基于volatile的解决方案 1 class

[UE4]扔枪

寵の児 提交于 2020-03-29 23:41:38
1.把枪Detach掉:DetachFromActor 3个都选择“Keep World” 2.模拟物理 3.给一个向前的速度 4.切枪,到上一个武器,或者捡起脚底下的武器 注意Get Component by Class的搜索范围:因为是在weapon枪支组件内部调用该方法,因此搜索范围仅限于weapon的内部组件。weapon的子类都添加有Mesah的组件。 StaticMesh继承与MeshComponent 这里的“Mesh”也是“StaticMesh”组件,因此 可以搜索到weapon子类里面的Mesh对象 模拟物理引起的问题:因为设置的是组件子节点模拟物理,所以扔出去的枪模型跟组件坐标位置不重叠。 解决这样的问题的办法是:把跟根节点设置为StaticMesh并设置模拟物理: 1.添加一个Static Mesh组件,并命名为Root 2.拖拽创建好的Root,拖放到默认生成出来的“DefaultSceneRoot”上面,Root组件就会变成跟根组件了。 3.根节点Root的“Static Mesh”如果为空的话,模拟物理是无效的。 4.可以添加一个很小很小的Static Mesh:在地图场景中添加一个 Box Brush,设置长宽高为0.1,并转换成 Static Mesh,命名为 Small Mesh 5.设置Root的Static

23.面向对象-----static关键字

混江龙づ霸主 提交于 2020-03-29 17:32:22
一、类属性、类方法的设计思想 二、使用范围 在Java类中,可用static修饰 属性、方法、代码块、内部类。 三、static修饰成员特点 ①随着类的加载而加载; ②优先于对象存在; ③修饰的成员,被所有对象所共享; ④访问权限允许时,可不创建对象,直接被类调用 四、类变量 代码: public class test { public static void main(String[] args) { Person.country = "中国"; System.out.println(Person.country);//中国 } } class Person{ String name; int age; static String country; public void eat(){ System.out.println("人吃饭"); } } 内存解析: 五、类方法 说明: ① 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用; ② 静态方法中,只能调用静态的方法或属性;非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性 ③ 在静态的方法内,不能使用this关键字、super关键字 public class test { public static void main(String[] args) { Person.country = "中国";