如图,是Java中静态代码和实例对象互相调用的规则,我们接下来就讲讲为什么在Java中静态方法不可以调用非静态代码呢。...静态方法不依赖于对象的调用,它是通过‘类名.静态方法名’这样的方式来调用的。而对于非静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问非静态方法。...因此在对象未存在时非静态方法也不存在,静态方法自然不能调用一个不存在的方法。...(2)这里用null的话(即(Test)null)是将Test引用强制转换为Test对象,这样也可以调用静态方法,其实不需要null,也是可以调用静态方法的,即Test.Print()。...(3)不能用一个值为null的引用类型变量来调用非静态方法,这样会抛出空指针异常,但是静态方法可以被一个值为null的引用类型变量调用而不会抛出空指针异常。
前言 上一篇我们介绍了《Android NDK编程(四)--- C/C++调用Java中的方法》,主要是C/C++中调用Java的方法,这一篇我们针对上一篇的内容再延伸说一下,关于调不同类中的静态方法。...上面来说我们从java调C/C++的方法其实基本都差不多,下面我们重点要说一下C/C++调用java的方法。 我们在VaccaeJNI中加入一个native的静态方法和一个本地的静态方法。 ?...在按钮事件中我们再写实现方法 ? 相对来说调用静态方法还是比较简单的,我们看一下运行结果 ?...---- 调用不同类中的方法 最后我们要说一下重点,因为我们在写方法的时候可能会调用的是不同类里面的方法,导航native的方法和要调用的java方法不在同一个类里,遇到这样的方法我们来看一看怎么实现...我们还是在VaccaeJNI的类中写一个非静态的方法,两个数相乘 ? 然后调用的native的函数,我们直接写在Mainactivity.java中 ?
scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的 案例 定义一个Person类 ?...中没有Java中的静态成员,若想要定义类似于Java的static变量、static方法,就要使用到scala中的单例对象——object....定义单例对象 单例对象表示全局仅有一个对象(类似于Java static概念) 定义单例对象和定义类很像,就是把class换成object 在object中定义的成员变量类似于Java的静态变量...]): Unit = { println(Dog.LEG_NUM) } } 在单例对象中定义成员方法 在object中定义的成员方法类似于Java的静态方法 示例 示例说明 设计一个单例对象...在Java中main方法是静态的,而在scala中没有静态方法。在scala中,这个main方法必须放在一个单例对象中。
定义当前包共享的属性和方法。 必须为同一个包下面的单例对象或者类才能访问到 导入包 import java.util._ 导入包 util中的所有成员 import java.util....一个.java文件 有一个 public 类。 Scala中没有 public关键字,默认就是公共的,一个.scala 中可以写多个类。声明类时不能加public,会报错。类名不要求和文件名一致。...访问权限 Java 中,访问权限分为:public,private,protected 和默认 Scala 中属性和方法的默认访问权限为 public,但 Scala 中无 public 关键字,不用显式声明...辅助构造方法不能直接构建对象,必须直接或者间接调用主构造方法 构造器调用其他另外的构造器,要求被调用构造器必须提前声明。 定义和类同名的方法,就是一个普通方法。...} } 多态 Java中的属性是静态绑定的,方法是在运行时动态绑定的。
静态属性和静态方法属于类而不属于特定的实例,在类的实例之间共享。 可以通过类名直接调用静态属性和静态方法,也可以通过实例对象间接调用。 静态方法中不能够通过this关键字使用实例属性。 ? ?...二十一,多态 Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。 这个非常重要的特性在面向对象编程中称之为多态。它的英文拼写非常复杂:Polymorphic。...RUNTIME类型的注解如何使用,完全由程序自己决定。 二十七,Scala和Java对比 Java发明于1995年,Scala发明于2003年。...Java 定义方法无需关键字,Scala 定义方法用关键字 def,可读性更强,类似Python. Scala支持for推导式,类似Python....Java中的类支持静态属性和静态方法,Scala用伴生对象和伴生方法概念将静态属性和方法与实例属性和方法分离。 Java的循环中支持break和continue关键字,Scala的循环中不支持。
不止是String类型,你可以重新定义任何类型上的*方法。 在调用Scala对象上的方法时,变量名和方法名中间的点"."可以省略,进一步,如果方法只包含一个参数,则参数两边的括号"()"可以省略。...在Scala中,类似这样的设计比比皆是,例如我们再来看看如何构建一个Map实例: val map = Map("name" -> "PlayScala社区", "url" -> "http://www.playscala.cn...Scala的泛型类型使用"[]"而不是像Java那样使用"",因为在Scala中""是有效的方法名,它们有更重要的用途。...age_=和age: println(p.age) // 将会调用方法p.age() p.age = 30 // 将会调用方法p.age=(30) 在Scala中,setter/getter方法名未采用..., 类似于Java类上的静态方法,只不过Scala将Java类上的静态功能全交给object实现。
value += 1 } // 方法默认是public的 def age() = value } 在Scala中,类并不声明为public,类都具有公有可见性 使用类需要做的就是构造对象并按照通常的方式来调用方法...,如上面的例子中,name和age成为person类的字段 2:主构造器会执行类定义中的所有语句 构造参数也可以是普通的方法参数,不带val或var,这样的参数如何处理取决于它们在类中如何被定义。...如果不带val或var的桉树至少被一个方法所使用,那么它将是字段 辅助构造器 和java一样,Scala也可以有任意多的构造器 1:辅助构造器的名称为this,在java中辅助构造器的名称与类名相同 2...对象 在scala中没有静态方法或静态字段,我们可以用object这个语法结构来达到同样的目的,对象定义了某个类的单个实例,包含特性,比如: object Accounts{ private var...在集合那个篇章里面,有讲到一个val list = List("1","2") 其实这个内部就是一个伴生类, 在java中,会用到既有实例方法又有静态方法的类,在Scala中,可以通过类和与类名同名的"
可以使用方法定义声明异常。 它向调用者函数提供了此方法可能引发此异常的信息。 它有助于调用函数处理并将该代码包含在 try-catch 块中,以避免程序异常终止。...4) protected 为受保护权限,scala 中受保护权限比 Java 中更严格 , 只能子类访问,问同包无法访问 (编译器从语法层面控制)。...中伴生对象采用 object 关键字声明,伴生对象中声明的全是 “静态“内容,可以通过伴生对象名称直接调用。...3) 伴生对象中的属性和方法都可以通过伴生对象名直接调用访问 4) 从语法角度来讲,所谓的伴生对象其实就是类的静态方法和静态变量的集合 5) 从技术角度来讲,scala 还是没有生成静态的内容,只不过是将伴生对象生成了一个新的类...[如何理解] 5) 抽象类中有 抽象的方法,如何动态混入特质->可以,在创建实例时,实现抽象方法即可 scala package cn.buildworld.scala.day2 object demo2
从当初“Scala取代Java”的争论,到今天两者的相安无事,Scala带给了我们哪些有意义的尝试呢?...伴生对象与伴生类 伴生对象与伴生类在Scala的面向对象编程方法中占据极其重要的位置,例如Scala中许多工具方法都是由伴 生对象提供的。...Java中的类,可以既有静态成员,又有实例成员。...而在Scala中没有静态成员(静态字段和静态方法),因为静态成员从严格意义而言是破坏面向对象纯洁性的,因此,Scala借助伴生对象来完整支持类一级的属 性和操作。...根据上述描述,我们继续看看如何用各种Hacker的调用方式: ?
单例对象(Object) scala中没有Java中的静态成员,我们想要定义类似于Java的static变量、static方法,就要使用到scala中的单例对象——object. 7.1 定义单例对象...) } } 7.2 在单例对象中定义成员方法 在object中定义的成员方法类似于Java的静态方法 示例 示例说明 设计一个单例对象,定义一个能够打印分割线(15个减号)的方法 在main方法调用该方法...而在Java中main方法是静态的,而在scala中没有静态方法。在scala中,这个main方法必须放在一个单例对象中。...10.1 定义语法 scala和Java一样,使用extends关键字来实现继承 可以在子类中定义父类中没有的字段和方法,或者重写父类的方法 类和单例对象都可以从某个父类继承 语法 class/object...抽象类 和Java语言一样,scala中也可以定义抽象类 12.1 定义 如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类 不完整定义有两种情况: 方法没有方法体(抽象方法) 变量没有初始化
---- 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到object中 语法: object xxx{ // 内容 } 反向理解,class中的东西...在单例对象中定义的变量,类似于Java中的static成员变量 在单例对象中定义的方法,类似于Java中的static方法 object单例对象的构造代码可以直接写在花括号中 调用单例对象的方法,直接使用单例对象名...如何直接使用类名来创建对象呢? 查看scala源代码: 答案就是:实现伴生对象的apply方法 伴生对象的apply方法用来快速地创建一个伴生类的对象。...apply方法,在apply方法中来创建对象 定义apply时,如果参数列表是空,也不能省略括号(),否则引用的是伴生对象 main方法 scala和Java一样,如果要运行一个程序,必须有一个main...而在Java中main方法是静态的,而在scala中没有静态方法。在scala中,这个main方法必须放在一个object中。
但在scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的 案例 定义一个Person类 在main方法中创建该类的对象,测试是否能够访问到私有成员...单例对象(Object) scala中没有Java中的静态成员,我们想要定义类似于Java的static变量、static方法,就要使用到scala中的单例对象——object. 7.1 定义单例对象...) } } 7.2 在单例对象中定义成员方法 在object中定义的成员方法类似于Java的静态方法 示例 示例说明 设计一个单例对象,定义一个能够打印分割线(15个减号)的方法 在main方法调用该方法...而在Java中main方法是静态的,而在scala中没有静态方法。在scala中,这个main方法必须放在一个单例对象中。...10.1 定义语法 scala和Java一样,使用extends关键字来实现继承 可以在子类中定义父类中没有的字段和方法,或者重写父类的方法 类和单例对象都可以从某个父类继承 语法 class/object
如果从程序中创建了一个JAR文件,并通过命令行调用它,则Flink集群管理器将执行您的main方法,getExecutionEnvironment()将返回一个执行环境,用于在集群上执行程序。...DataStream 也可以通过使用转换函数调用DataSet上的方法来应用转换。...5.3 指定key的key选择器函数 定义键的另一种方法是“键选择器”功能。 键选择器函数将单个元素作为输入并返回元素的键。 key可以是任何类型,并且可以从确定性计算中导出。...本节列出了如何指定它们的不同方法 6.1 Java版本 6.1.1 实现接口 最基本的方法是实现一个提供的接口: class MyMapFunction implements MapFunction<String...和Scala类视为特殊的POJO数据类型: public限定 它必须有一个没有参数的公共构造函数(默认构造函数)。
方法调用 在程序运行时,进行方法调用是最普遍,最频繁的操作 方法调用不等于方法执行: 方法调用阶段唯一的任务就是确定被调用的方法版本,即调用哪一个方法 不涉及方法内部的具体运行过程 Class文件的编译过程不包括传统编译中的连接步骤...Class文件中的一切方法调用在Class文件里面存储的都是符号引用,而不是方法在在实际运行时内存布局中的入口地址,即之前的直接引用: 这样使得Java具有更强大的动态扩展能力 同时也使得Java方法调用过程变得相对复杂...方法在程序真正执行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的 也就是说,调用目标在程序代码中完成,编译器进行编译时就必须确定下来,这也叫做方法解析 Java方法分类 在Java...静态类型的Human两个变量man和woman在调用sayHello() 方法时执行了不同的行为 变量man在两次调用中执行了不同的方法 导致这个现象的额原因 :这两个变量的实际类型不同 Java虚拟机是如何根据实际类型分派方法的执行版本的...,可以理解虚拟机在分派中 "会做什么" 这个问题 虚拟机 "具体是如何做到的" 在各种虚拟机实现上会有差别: 由于动态分派是非常频繁的动作,而且动态分派的方法版本选择过程需要运行时在类的方法元数据中搜索合适的目标方法
本文并不是教大家如何书写Lambda表达式(如果这点基础还不会,自行阅读《疯狂Java讲义》吧)。 Lambda表达式的有趣之处在于,从JVM的角度来看,它们是完全不可见的。...我们一起来看看Scala和Java编译器如何实现Lambda表达式会很有趣。结果非常令人惊讶。 为了实现这一目标,我采用了一个简单的Lambda表达式,将一个字符串列表转换为它们的长度列表。...有趣的是,虽然Lambda被定义为我们方法的一个组成部分,但实际上它完全存在于我们的课程之外。...这是非常棒的切割器——只需加载String参数,调用length()并将结果打包。请注意,它被编译为静态函数,以避免像我们在Scala中看到的那样将其他对象传递给它。.../Integer; areturn 这是invokedynamic方法的另一个优点,因为它允许我们从.map()函数的角度以多态方式调用方法,但不必分配包装器对象或调用虚拟覆盖方法。
成都办公室的崔鹏飞在学Scala的时候,不止学习如何使用Scala,也研究了Scala中的语言特性是如何实现的。...Scala中的语言特性是如何实现的(1) Scala可以编译为Java bytecode和CIL,从而在JVM和CLI之上运行。...Scala有很多在Java和C#的世界中显得陌生的语言特性,本文将分析这些语言特性是如何实现的。...我们将这段Scala编译为Java bytecode,然后反编译为Java,会发现编译器为HowIsObjectImplementedInScala这个object生成了两个类: image.png 第一个类只包含一个静态方法...这段Scala代码: image.png 定义了两个字段一个var,一个val,方法中定义了两个局部变量,一个var,一个val。
条件表达式 Scala的 if/else 的语法结构和Java的一样.不过,在Scala中 if/else 表达式有值,这个值就是跟在 if 或 else 之后的表达式的值: if(x > 0) 1...备注 Scala中每个表达式都有一个类型 scala> val s = if(x > 0) "positive" else -1; s: Any = positive 上述表达式的类型是两个分支类型的公共超类型....在这个例子中,其中一个分支是java.lang.String,而另一个分支是Int.它们的公共超类型是Any....遍历字符串或者数组时,你通常需要使用从0到n-1的区间.这个时候你可以使用util方法而不是to方法.util方法返回一个并不包含上限的区间: val s = "Hello" for(i <- 0 until...和Java一样,抛出的对象必须是 java.lang.Throwable 的子类.不过,与Java不同的是,Scala没有”受检”异常,你不需要声明函数或者方法可能会抛出某种异常. throw 表达式有特殊的类型
4、没有++操作符,因为Scala中大部分的算术类型都是不可变的如Int类型。 5、Scala.math中定义了很多方法,类似于静态方法。引入包后可以直接调用如:sqrt(4)。...6、Scala中没有static静态关键字,不过存在一个单例对象定义:object a{},该类中的方法可以直接通过类名调用,类似于静态方法。...解决这个问题可以通过伴生对象和类型投影 第六章:对象 1、单例对象:Scala中没有静态方法和静态字段,你可以用object这个语法来达到同样目的,object定义的就是单例对象。...2、伴生对象:可以通过定义与类同名的伴生对象来实现像Java和C++中类即有静态方法和实例方法的类。伴生对象和该类可以相互访问私有特性,但是必须在同一个文件中。...5、在Scala中程序必须从object对象的main方法开始。 第七章:包和引入 1、包和Java中的包类似,只是Scala中定义包的方式更多,可以使用{},可以文件顶部标记。
java封装操作如下: 将属性进行私有化 提供一个公共的set方法,用于对属性赋值 提供一个公共的get方法,用于获取属性的值 定义一个对象 class Person{ /** * id...没有哪个程序员会是某垃圾的粉丝吧。 ---- 调用父类中的方法 在java中若要调用父类中的 方法,会使用supper 关键字,在scala中也是一样。...此时有个,有个问题,在scala中定义副构造器必须调用主构造器或其他副构造器。...这里涉及到了java 中静态分派与动态分派相关的概念 思考三: person.hobby 又是什么? 答案:肯定是 Student 中的 "打篮球";这个我就写,可以下去动手试试。...总结: 这就是 scala 中的 三大特性继承、封装、多态; 基本上和java类似,为了区分开的是 java中 属性不具备多态性,scala中属性具备多态性。
Java VS Scala 从定义上来说,Java是面向对象的编程语言,而Scala是函数式编程语言,这两门语言之间,本身也有一定的关联。...3、基本类型 Scala中没有真正意义上的基本类型,类型都是类。 4、静态 Java中静态static是违背Java OOP编程思想和封装特性。...6、类 Scala类中的字段自动带有getter和setter方法,另外可以使用@BeanProperty注解来生成Java中的Get/Set方法。...Scala中的每个类都有一个主构造方法,这个构造方法和类定义“交织在一起”,类的参数直接成为类的字段,主构造方法执行类体中的所有语句。...包 11、特质trait可以类比Java中的接口,但是和接口非常不一样 Java中称为类实现了接口,Scala中称为混入了特质 和Java中的接口不同,Scala中的特质可以包含带有方法体的方法(JDK8
领取专属 10元无门槛券
手把手带您无忧上云