静态方法

第6节 静态static关键字

随声附和 提交于 2020-02-26 16:38:40
1.概述. 2.静态static关键字修饰成员变量(也就是类属性) ============================================================================================================================ Student.java package cn.itcast.day08.demo03; public class Student { private int id; // 学号 private String name; // 姓名 private int age; // 年龄 static String room; // 所在教室 private static int idCounter = 0 ; // 学号计数器,每当new了一个新对象的时候,计数器++ public Student() { this.id = ++idCounter; } public Student(String name, int age) { this.name = name; this.age = age; this.id = ++idCounter; } public int getId() { return id; } public void setId(int id) { this

静态代理、动态代理,以及动态代理的调用说明

自作多情 提交于 2020-02-26 05:34:41
原文作者:弥诺R 原文地址: http://www.minuor.com/1524750034/article 转载声明:转载请注明原文地址,注意版权维护,谢谢! 提前说说 项目中涉及到的代码我都会上传到码云(gitee)或者github上,提供给大家下载参考,文中就以最简单的方式说明执行过程。源码的地址在文末哦! 代理模式 代理模式分为静态代理和动态代理两种方式,静态代理是在开发的时候就写好代理的过程,并且代理类要和目标类实现同一个接口。而动态代理是代理类通过实现InvocationHandler接口完成,在运行期间动态的构建代理对象,在动态代理的实现过程中还有另一个更为重要的类Proxy,准确的来说,Proxy负责生成代理对象,而InvocationHandler是根据生成的代理对象执行增强内容和目标方法或类。 静态代理 ####要点: 1、代理类需要和目标类需要实现同一个接口 2、在代理类中会内置目标类对象 ####代码分析 创建一个接口Transformers(变形金刚) public interface Transformers { void trans2man();//变形->人 void trans2car();//变形->车 } Transformers的实现类TransformersImpl,可以理解为擎天柱 擎天柱实现了变形金刚接口,拥有两个功能分别是变形成人

c#学习历程2

拜拜、爱过 提交于 2020-02-26 05:27:08
一.类的访问权限 访问修饰符:internal ;public ;abstract 或者internal abstract public abstract;sealed或internal sealed / /不写修饰,默认为internal,同一程序集都可访问 internal class MyClass { } //抽象类,不能被实例化,只能被继承 abstract class ClassA { } //密封类,只能被实例化,不能被继承 sealed class ClassB { } 二.字段方法 字段:由三部分组成----访问修饰符,字段的类型和字段名。 属性:是对字段的扩充,保证内部成员的完整性(这样字段可以定义为私有,通过属性赋字段值 取字段值) class ClassC { // 字段 public int a ; public int b = 1 ; public static int c = 2 ; public const int d = 3 ; public readonly int e ; //只读类型 } //属性 class ClassD { private string name ; private int age ; public string Name { //value为隐形 set { name = value ; } get { return

浅谈java中的static关键字

不问归期 提交于 2020-02-25 23:32:55
学习自: http://www.cnblogs.com/dolphin0520/p/3799052.html static 关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。比如一些常量 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类 举例:下面的单例模式方法中为什么要用static修饰符来修饰getInstance方法。可以在不用创建对象Singlteon的时候直接通过 Singleton1.getInstance();实现此方法。 package Singleton; /** * Created by hanzhixiong on 2017/10/9. */ public class Singleton1 { private static Singleton1 instance ; //private Singleton1(){};// 构造类 public static Singleton1 getInstance(){ if ( null == instance ){ instance = new Singleton1(); } return instance ; } } importSingleton.Singleton1;

变量的存储类别

蹲街弑〆低调 提交于 2020-02-25 20:22:58
一、在运行程序的时候,操作系统会将虚拟内存进行分区。 1).堆 在动态申请内存的时候,在堆里开辟内存。 2).栈 主要存放局部变量。 3).静态全局区 1:未初始化的静态全局区 静态变量(定义变量的时候,前面加static 修饰),或全局变量,没有初始化的,存在此区 2:初始化的静态全局区 全局变量、静态变量,赋过初值的,存放在此区 4).代码区 存放咱们的程序代码 5).文字常量区 存放常量的。 普通的全局变量 概念: 在函数外部定义的变量 int num=100;//num 就是一个全局变量 int main() { return 0; } 作用范围: 全局变量的作用范围,是 程序的所有地方。 只不过用之前需要声明。声明方法 extern int num; 注意声明的时候,不要赋值。 生命周期: 程序运行的整个过程,一直存在,直到程序结束。 注意:定义普通的全局变量的时候,如果不赋初值, 它的值默认为0 静态全局变量static 概念: 定义全局变量的时候,前面用static 修饰。 static int num=100;//num 就是一个静态全局变量 int main() { return 0; } 作用范围: static 限定了静态全局变量的,作用范围 只能在它定义的.c(源文件)中有效 生命周期: 在程序的整个运行过程中,一直存在。 注意:定义静态全局变量的时候

python静态方法、类方法和实例方法

天大地大妈咪最大 提交于 2020-02-25 07:26:01
1. 静态方法 如果我们的类属性是一个私有变量,我们就需要定义一个函数使得在类外可以访问它。我们希望既可以用类名来访问,也可以用实例名来访问,那么该如何做呢? 下面这样是不行的: class Robot: # __开头表示私有变量 __counter = 0 def __init__(self): type(self).__counter += 1 def RobotInstances(self): return Robot.__counter if __name__ == "__main__": x = Robot() print("通过实例访问: ", x.RobotInstances()) # 下面会报错 print("通过类访问: ", Robot.RobotInstances()) 改代码无法通过类名访问,因为这种定义方式必须要定义一个实例,self指向这个实例。 如果我们在定义RobotInstances这个函数的时候,不写self参数,那么可以通过类访问,不能通过实例访问,静态方法就是为了解决这个问题。只需要在定义的函数前添加@staticmethod,这是装饰器语法。 class Robot: # __开头表示私有变量 __counter = 0 def __init__(self): type(self).__counter += 1 @staticmethod

Java基础——对象和类

ⅰ亾dé卋堺 提交于 2020-02-24 23:05:25
  将包含main方法的类称为主类。   变量的作用域是指变量可以在程序中引用的范围。   实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的。   局部变量的声明和使用都在一个方法的内部。   一个类的实例变量和静态变量称为类变量或数据域。在方法内部定义的变量成为局部变量。   局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止。局部变量都必须在使用之前进行声明和赋值。(Java没有给局部变量赋默认值)   无论在何处声明,类变量的作用域都是整个类。类的变量和方法可以在类中以任意顺序出现。但当一个数据域是基于对另一个数据域的引用来进行初始化时则不是这样。在这种情况下,必须首先声明另一个数据域。   类变量只能声明一次,但是在同一个方法内不同的非嵌套块中,可以多次声明相同的变量名。   可以在一个方法的不同块里声明同名的局部变量,但是,不能在嵌套块中或同一个块中两次声明同一个局部变量。   如果一个局部变量和一个类变量具有相同的名字,那么局部变量优先,而同名的类变量将被隐藏。   可以把两个类放在同一个文件中,但是文件中只能有一个类是公共(public)类。此外,公共类必须与文件同名。源代码中的每个类编译成.class文件。   构造方法在使用new操作符创建对象的时候调用,它是一种特殊的方法,有以下三个特殊性:    (1)构造方法必须具备和所在类相同的名字

Java基础常见面试题最后十题

两盒软妹~` 提交于 2020-02-24 20:15:48
1.为什么等待(wait())和通知(notify())是在 Object 类而不是 Thread 中声明的? 生产者-消费者问题代码实现 ①.生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 ②.解决办法:要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。通常采用进程间通信的方法解决该问题,常用的方法有信号灯法等。如果解决方法不够完善,则容易出现死锁的情况。出现死锁时,两个线程都会陷入休眠,等待对方唤醒自己。该问题也能被推广到多个生产者和消费者的情形。 void notify() 唤醒在此对象监视器上等待的单个线程 void notifyAll()

static 关键字和 final 关键字

白昼怎懂夜的黑 提交于 2020-02-24 14:03:32
内容来自《java 编程思想》。 1、static 关键字 “static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途”。static 关键字的基本作用,一句话来描述就是: 方便在没有创建对象的情况下来进行调用(方法/变量) 。 (1) static 方法 static 方法称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有 this 的。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是在非静态成员方法中是可以访问静态成员方法/变量的。因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为 static。我们最常见的 static 方法就是 main 方法,因为程序在执行 main 方法的时候没有创建任何对象,因此只有通过类名来访问。比如: public class Test { public void f ( ) { } public static void g ( ) { } public static void main ( String [ ] args ) {

单例模式的优缺点和使用场景

冷暖自知 提交于 2020-02-24 10:44:23
文章转自:http://www.tools138.com/create/article/20150929/020009847.html 单利模式的优缺点和使用场景 首先介绍一下单例模式: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 实现单例模式的思路是: 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名 称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们 还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。 需要注意的地方: 单例模式在多线程的 应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在