静态方法

[java]静态方法访问非静态方法的方法

送分小仙女□ 提交于 2020-02-10 09:25:43
是不是是有点拗口哈,在刚开始的开发中,经常会碰到"无法访问非静态方法",如下: Test.java public Test{ public void notStatic(){ System.out.println("我访问了非静态方法"); } public static void main(String[] args){ notStatic();//错误,无法访问 } } 解决办法有二: 一 、设置其为静态方法 //加入 static public static void notStatic(){ System.out.println("我访问了非静态方法"); } 二、new 对象 引用方法 并不是什么时候都可以设置其为静态方法,比如安卓开发中findViewById只能在非静态方法中调用,那怎么办呢.很简单,new对象引用。 Test.java public Test{ public void notStatic(){ System.out.println("我访问了非静态方法"); } public static void main(String[] args){ //notStatic();//错误,无法访问 Test test = new Test(); test.notStatic(); //引用 } } 关于 static 此部分文章原文链接: JAVA菜鸟入门篇

理解和运用Java中的Lambda

早过忘川 提交于 2020-02-09 19:05:35
前提 回想一下, JDK8 是2014年发布正式版的,到现在为( 2020-02-08 )止已经过去了5年多。 JDK8 引入的两个比较强大的新特性是 Lambda 表达式(下文的 Lambda 特指 JDK 提供的 Lambda )和 Stream ,这两个强大的特性让函数式编程在 Java 开发中发扬光大。这篇文章会从基本概念、使用方式、实现原理和实战场景等角度介绍 Lambda 的全貌,其中还会涉及一些函数式编程概念、 JVM 一些知识等等。 基本概念 下面介绍一些基本概念,一步一步引出 Lambda 的概念。 函数式接口 函数式接口和接口默认方法都是 JDK8 引入的新特性。函数式接口的概念可以从 java.lang.FunctionalInterface 注解的 API 注释中得知: An informative annotation type used to indicate that an interface type declaration is intended to be a functional interface as defined by the Java Language Specification. Conceptually, a functional interface has exactly one abstract method. Since {

为什么静态域与网络传输无关

有些话、适合烂在心里 提交于 2020-02-09 07:26:36
首先静态域与网络传输没有关系,静态域不可以被序列化,也不会在网络中被传输。我们先通过一个例子验证这个问题,后面再分析静态域到底是怎样的一种存在。 以下是一个socket通信过程,Client端负责实例的构造和发送,Server端负责监听和接收来自端口的实例,User类拥有静态变量和成员变量,这里将User的实例作为目标进行传输。 import java.io.*; import java.net.Socket; /** * User: zzzz76 * Date: 2018-07-07 */ public class Client { public static void main(String[] args) throws Exception { User.setTag("client"); for (int i = 0; i < 5; i++) { Socket socket = null; BufferedOutputStream bos = null; ObjectOutputStream oos = null; try { socket = new Socket("localhost", 10000); bos = new BufferedOutputStream(socket.getOutputStream()); oos = new

Linux下静态编译Qt程序

萝らか妹 提交于 2020-02-09 00:59:01
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的。会提示缺少……库文件之类的错误。这就是动态编译的结果。 但是如果我们想编译一个程序,这个程序在发给别人后,他们可以直接打开,而不需要特别地去先安装Qt库,那就需要采用静态编译了。 在Linux下如何静态编译Qt程序呢? 首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先是需要一个静态编译安装的Qt 1、下载源安装程序,如 qt-x11-opensource-src-4.5.1.tar.gz 2、解压到某一目录 3、cd 进入解压后的目录,命令: ./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.5.1_static 参数-static 指的是要采用静态编译Qt的方法 参数-release指的是只编译release版本的库 参数-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg 是更好确定Qt编译出的程序能在目前不知的系统下运行。 参数

Linux/Ubuntu下 静态编译Qt程序

穿精又带淫゛_ 提交于 2020-02-09 00:56:10
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的。会提示缺少……库文件之类的错误。这就是动态编译的结果。 但是如果我们想编译一个程序,这个程序在发给别人后,他们可以直接打开,而不需要特别地去先安装Qt库,那就需要采用静态编译了。 在Linux下如何静态编译Qt程序呢? 首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先是需要一个静态编译安装的Qt 1、下载源安装程序,如 qt-x11-opensource-src-4.5.1.tar.gz 2、解压到某一目录 3、cd 进入解压后的目录,命令: ./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.5.1_static ./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr

Django——静态文件配置和连接数据库

微笑、不失礼 提交于 2020-02-08 20:23:10
一、静态文件 1.什么是静态文件 网站所使用的提前写好的,之后也不会再去改变的文件。 例如css,js,第三方组件:bootstrap等 2.static文件夹 专门用来存放静态文欧东件的,需要自己手动创建,文件内部通常是一下结构: static -css 网站所用到的所有的css文件 -js 网站所用到的所有的js文件 -image 网站所用到的所有的图片文件 第三方文件 3.静态文件配置 基本配置 STATIC_URL = '/static/' # 访问后端静态资源的接口前缀 默认情况下接口前缀名与静态文件名保持一致 """ <link rel="stylesheet" href="/xxx/bootstrap-3.3.7-dist/css/bootstrap.min.css"> 你要想访问后端的静态资源 你必须以接口前缀开头 后面跟上具体的文件路径 才能够访问到对应的资源 当你的接口前缀正确之后 会拿着后面的路径依次去下面列表中的每一个文件夹下查找对应的资源,顺序是从上往下依次查找 如果都没有找到才会报错 """ STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), # 这里的static才是你文件夹的路径 os.path.join(BASE_DIR,'static1'), os.path.join(BASE_DIR,

强类型语言和静态类型语言有什么区别?

蹲街弑〆低调 提交于 2020-02-08 17:27:15
另外,一方是否意味着另一方? #1楼 强类型意味着类型之间的转换之间存在限制。 静态类型意味着类型不是动态的 - 一旦创建变量,就无法更改变量的类型。 #2楼 这经常被误解,所以让我澄清一下。 静态/动态打字 静态类型 是类型绑定到 变量的位置 。 在编译时检查类型。 动态类型 是类型绑定到 值的位置 。 在运行时检查类型。 所以在Java中例如: String s = "abcd"; s 将“永远”成为一个 String 。 在它的生命中它可能指向不同的 String (因为 s 是Java中的引用)。 它可能具有 null 值,但它永远不会引用 Integer 或 List 。 那是静态打字。 在PHP中: $s = "abcd"; // $s is a string $s = 123; // $s is now an integer $s = array(1, 2, 3); // $s is now an array $s = new DOMDocument; // $s is an instance of the DOMDocument class 这是动态打字。 强/弱打字 (编辑提醒!) 强类型 是一个没有广泛认同意义的短语。 大多数程序员使用这个术语来表示静态类型以外的东西,使用它来暗示存在由编译器强制执行的类型规则。 例如,CLU有一个强类型系统

类加载与双亲委托

我的未来我决定 提交于 2020-02-08 17:17:08
在Java语言里面,类型的加载,连接和初始化过程都是在程序运行期间完成的,虽然会令类加载时稍微增加一些性能开销,但是为Java应用程序提供了高度的灵活性 为什么Java天生就可以动态扩展? 依赖运行期加载和动态连接 类加载的生命周期? 加载,验证,准备,解析,初始化,使用,卸载 (验证,准备,解析)称为连接 加载,验证,准备,初始化,卸载的顺序的固定的,解析某些情况下可以在初始化之后进行,就是为了支持Java语言的运行时绑定。 初始化阶段,虚拟机规范严格规定了5种情况必须进行初始化 1)遇到new,getstatic,putstatic,invokestatic这4条字节码指令时,如果类没有过初始化,则需要先触发其初始化。生成这4条指令的常见java代码场景是:使用new关键字实例化对象,读取或设置一个类的静态字段,以及调用一个类的静态方法 2)使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行初始化,则需先进行初始化 3)当初始化一个类时,发现其父类还没有初始化的时候,则需先触发父类的初始化 4)当虚拟机启动时,用户需要指定一个要执行的主类,虚拟机会先初始化该主类 5)如果一个MethodHandle实例最后的解析结果REF_getStatic方法句柄所对应的类没有初始化,则要进行初始化(这条看不懂,,,) 通过引用父类的静态字段

深入分析Java中的关键字static

馋奶兔 提交于 2020-02-08 11:57:15
在平时开发当中,我们经常会遇见static关键字。这篇文章就把java中static关键字的使用方法的原理进行一个深入的分析。先给出这篇文章的大致脉络: 首先,描述了static关键字去修饰java类、方法、变量、代码块的方法 然后,从底层分析static关键字, 接下来,给出static的一些使用场景和案例 最后,对static进行一个总结,包括和普通变量的区分。 OK,开始今天的文章。 一、static关键字的基本用法 1、static关键字基本概念 我们可以一句话来概括:方便在没有创建对象的情况下来进行调用。 也就是说:被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。对于这个概念,下面根据static关键字的四个基本使用来描述。然后在下一部分再来去分析static的原理,希望你能认真读完。 2、static关键字修饰类 java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。下面看看如何使用。 如果没有用static修饰InterClass,则只能new 一个外部类实例。再通过外部实例创建内部类。 3、static关键字修饰方法 修饰方法的时候,其实跟类一样,可以直接通过类名来进行调用: 4、static关键字修饰变量 被static修饰的成员变量叫做静态变量

Java期末复习

天大地大妈咪最大 提交于 2020-02-08 05:00:13
类变量也叫静态变量,也就是在变量前加了static 的变量; 实例变量也叫对象变量,即没加static 的变量; 区别在于: 类变量和实例变量的区别在于:类变量是所有对象共有, 其中一个对象将它值改变,其他对象得到的就是改变后的结果; 而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象; 2. 在类中定义的成员变量如果你没有初始化java会自动帮你初始化, 如果是数字会自动初始化成0,字符会初始化成’o’,对象引用会初始化成null. 当然如果你定义的是局部变量就必须初始化了,否则编译会报错 这正是java的特点,极大的提高了代码安全性 3.定义方法p176(方法调用用栈) 访问修饰符 修饰符 返回值类型 方法名(){ 方法体 } 4.对象和类 区别:对象可以使用类中的方法和变量,而变量不行;变量声明之后要进行赋值,而对象不用 联系:类是封装对象的属性和行为的载体,而对象的属性以成员变量的形式存在。 对象的方法以成员方法的形式存在,在成员方法内定义的变量为局部变量。 变量:成员变量/类变量/数据域(静态变量(有static),实例变量),局部变量(在方法体中定义的变量) 局部变量必须先赋值再使用,成员变量有默认值 公共类必须与文件同名 源代码中的每个(※每个类)类(※编译后为。class)编译成.class文件 uml图+为public修饰符 p283