导航:首页 > 编程语言 > java函数式编程例子

java函数式编程例子

发布时间:2023-03-06 12:26:32

java使用main函数分别调用4个方法来计算长方形的面积,使用传参并且有返回值的方式

感谢邀请。man方法是void类型,void没有返回值类型

在java语言程序编写时都会涉及到一个main方法,它的格式为:

public static void main(String[] args)(一般必须这么定义,这是java规范)

在这里修饰符public和static的顺序是可以互换的。但是根据java的惯例,一般把public放在前面,后面的参数名args是不固定的,开发者可以任意命名。

1) public关键字指可以其他类可以访问这个函数。

2) static 关键字指静态函数,调用时不会实例化(即不能创建对象)(静态函数直接通过类名就可以调用)

3) void 关键字指该函数无返回值

Main()方法是应用程序的入口,一个程序执行时会首先从指定类的main()方法开始,再启动程序所需要的其它资源。


注:一个类如果不是作为程序入口的话,可以没有main()方法。

一个应用程序也可以由任意数量的main方法,因为每个类都可以有一个main方法,或者多个(重载)。但是在任何给定时间,运行程序只使用一个main方法。

② java支持的编程范式

Java编程范式

1.命令式编程
核心内容就是:“用语句更改程序的状态”
大多数流行的编程语言都或多或少基于命令式编程发展而来,命令式语言最典型的实例就是C语言

2.面向对象编程
面向对象编程经常与命令式编程联系在一起,在实践当中,两者是可以共存的。Java就是这种协作的生动证明
面向对象基于四个基本原则:封装、继承、多态、抽象

3.声明式编程
与命令式编程相反,声明式编程它指定程序应该做什么,而不具体说明怎么做。
纯粹的声明式语言包括数据库查询语言(如SQL和Xpath)以及正则表达式。
与命令式编程语言相比,声明式编程语言更加抽象,它们并不模拟硬件结构,因此不会改变程序状态,而是将它们转换为新状态,并且更接近数学逻辑
通常,非命令是的编程范式都被认为属于声明式类别。

4.函数式编程
函数式编程是声明式编程的子范式,与命令式编程相反,函数式变成不会改变程序的内部状态。
在函数式编程术语中,函数类似于数学函数,函数的输出仅依赖于其参数,而不管程序的状态如何,完全不受函数式是何时执行的影响
函数式语言受欢迎的原因之一是它们可以轻松的在并行环境中运行,这与多线程不太一样,函数式语言支持并行的关键在于它们的基本原理:函数仅依赖与输入参数而不依赖于程序的状态。它们可以在任何地方运行,然后将多个并行执行的结果连接起来并进一步使用

③ java新手问题——输入函数

在Java中输入函数需要使用到 Scanner对象。

以下是输入函数使用的一个小例子:

public static void main(String[] args){

//构造一个Scanner对象,其传入参数为System.in

Scanner x=new Scanner(System.in);

System.out.print("请输入一个整数:");

//读取一个int数值

int i=x.nextInt();

System.out.println("你刚才输入的数为"+i);

}

结果如下:

(3)java函数式编程例子扩展阅读:

在类中构造一个Scanner对象,其传入参数为System.in

读取键盘数据方法如下:

1、读取一行文本(可带空格),使用nextLine( )。

2、读取一个单词,使用next( )。

3、读取一个int数值,使用nextInt( )。

4、读取一个double数值 ,使用nextDouble( )。

用hasNextInt()和hasNextDouble()检测是否还有表示int或double数值的字符序列

④ java stream 及早求值

流使用的通用格式:
获得流对象Stream
对流对象Stream进行惰性求值,返回值仍然是一个Stream对象。
对流对象Stream进行及早求值,返回值不在是一个Stream对象。

⑤ 如何学好一门编程语言

学好一门编程语言是十分不容易的,但是如果学会了,它的实用性是很强的,下面我为大家整理了学好一门编程语言的办法,大家可以参考借鉴。


如何学好一门编程语言?

一、多总结

多总结才能加深理解、增强记忆。举例,Go 中有 slice、map、channal 类型,它们都可以用 make 生成实例,但 slice 和 map 还可以用以下形式初始化,也是编程规范中建议的初始化方式:

colors := map[string]string{}

slice := []int{}

但注意了,channal 则没有这样的语法:msg := chan string{}

上面两句是生成实例,表示空集合,但下面两句则表示实例不存在,值为 nil

var colors map[string]string

var slice []int

另外,结构体指针 slice 还可以象下面这样初始化,结构体实例不用明确地指定类型(使用了类型推导)、不用明确地取地址运算(&)。

type Proct struct {

name string

price float64

}

procts := []*Proct{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}

看到没有,如果不经常总结,这一圈学下来会把你整的稀里糊涂的。

二、多比较

学一门新语言一定要与你之前已经熟悉的语言经常作比较,找出它们的相同与不同,这样才能加深记忆和理解,否则学完之后脑子里会一片混乱,搞不清谁是谁非了。

就拿数组来说吧,在 Java、Scala、Go 中定义、实例化、赋值是不一样的。

//Java

int[] arr;//定义数组,不可以指定数组长度

arr = new int[5];//创建数组对象(实例化),指定数组长度

arr[1] = 8;//赋值

//Scala

val arr = new Array[Int](5) //数组在Scala里用的是泛型类,构造函数参数指定数组大小

arr(1) = 8 //赋值,注意用的是括号

//Go

arr := [5]int{} //创建数组,初始化5个元素都为0,注意如果不指定数组长度,则是另外一种类型Slice

arr[1] = 8 //赋值

再比如 Map 在 Scala 与 Go 语言里定义、初始化、访问也是不同的,作了以下比较后印象会非常深刻,把它们记下来,这样以后使用就不会搞混了。

//Scala

val capital = Map("France" -> "Paris", "Japan" -> "Tokyo")

println(capital.get("France"))

//Go

capital := map[string]string{"France": "Paris", "Japan": "Tokyo"}

fmt.Println(capital["France"])

Go 同时给多个变量赋值在 Scala 里可以用模式匹配做到,如下:

//Scala(使用样本类的模式匹配)

case class Tao(name: String, age: Int);

val Tao(myName, myAge) = Tao("taozs", 18);

println(myName)

println(myAge)

//Go

myName, myAge := "taozs", 18

fmt.Println(myName)

fmt.Println(myAge)

//Scala(使用元组的模式匹配)

val (myNumber, myString) = (123, "abe")

println(myNumber)

println(myString)

//Go

myNumber, myString := 123, "abe"

fmt.Println(myNumber)

fmt.Println(myString)

以下是 Scala 和 Go 定义和实现函数的区别:

//Scala

val increase: Int => Int = (x: Int) => x + 1

println(increase(8))

//Go

var increase func(int) int = func(x int) int { return x + 1 }

fmt.Println(increase(8))

除了在 Scala 和 Go 里都可以类型推导外,在 Scala 里还可以这样定义函数:

//Scala

val increase = (_: Int) + 1

为方便自己将来随时查阅,可以建立下面这样的对比表格,描述不一定要求规范,自己能看懂就行。

三、转变思维方式,

学会用这门语言去思考

学会用语言去思考是关键。如果你以前是学 C 的,转学 Java,你一定要改变以前面向过程的思维,学会用面向对象的思维去分析问题;以前学 Java 的,转学 Scala 则要学会用函数式的编程思维解决问题。

举一个函数式编程的例子,以下是 Java 语言常用的 for 循环,循环变量从 1 到 10 执行 10 次循环体:

// 命令式编程

for (int i = 1; i < 10; i++) {

// 此处是循环体做10次

}

这被称为命令式编程 (Imperative Programming),但学了 Scala 的函数式编程 (Functional Programming) 后,解决同样的问题,我们可以换一种思维:构建 1 到 10 的列表序列,针对列表中的`每个元素分别执行函数,如下:

//函数式编程

val autoList = (1 to 10).map(i => /*此处是函数体,针对1到10的每一个分别调用 1次*/)

已经习惯了 Java 编程的,对 Scala 的函数式编程、样本类、模式匹配、不可变对象、隐式转换等需要一个逐步适应的过程,要渐渐学会用它们思考和解决问题。

再举个 Scala 与 Go 思维方式不同的例子,要实现对一个字符串里的每个字符加 1 的操作,Scala 里可以这样:

"abc".map(cc => cc + 1)

"abc"是一个字符串对象,调用它的方法 map,这是纯面向对象的思维,但在 Go 里就要转变为面向过程的思维:

name := "abc"

second := strings.Map(func(x rune) rune {

return x + 1

}, name)

注意,这里的 strings 是包 (package),调用它的公共函数 Map,被人操作的对象 name 字符串作为函数参数传入。Go 提供的函数 len、cap、append、 等其实都是面向过程的,虽然 Go 也提供有面向对象的支持,已经习惯了面向对象编程的,刚开始学 Go 语言需要特别留意这一点。

四、多看开源代码

学一门语言就是学一种思维方式,如今 GitHub 上可下载的开源代码海量级,通过看别人的代码,学习别人是如何解决问题的,养成用该语言思考的习惯,另外还能学习到一些非常有用的技巧,比如我在看一个 Go 语言性能测试框架代码时看到有以下写法:

func main() {

defer profile.Start().Stop()

...

}

这个意思是指刚进入程序时执行 Start( ) 函数,程序退出前调用 Stop( ) 函数,非常好的技巧啊!可以用于需要在程序执行前和程序完成后分别执行一段逻辑的场景。再看 Start( ) 函数是怎么实现的:

func Start(options ...func(*Profile)) interface {

Stop()

} {

...

return &prof

}

该函数返回了一个实现了含有 Stop( ) 函数接口的对象,如此才能在调用 Start 调用后连调 Stop。

五、优先学会使用代码分析工具

代码分析的工具包括静态检查、测试、测试覆盖率分析、性能分析(内存、CPU)、调试工具等,工具的价值在于它可以有效帮我们发现代码问题,这在我们刚开始学一门编程语言时意义尤其重大。

例如,以下这句 Java 赋值语句估计没有哪本教科书会告诉你有性能问题:

String sb = new String(“Hello World”);

以下这段 Java 代码你也不一定能意识到有多线程问题:

synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException

{

logger.info("start");

//连接不可用,直接抛出异常,等待接收线程连接服务器成功

if (!this.avaliable)

{

try

{

//如果连接不可用,则等待2S,然后重新检测

Thread.sleep(2000);

}

... ...

如果我们及时用 FindBugs 工具检查就会发现上面这些问题,进而你会去分析研究为什么,如此,你对这门语言的了解也会越来越多。

另外,Go 语言自带的 vet/test/cover/pprof/trace 都是非常有用的工具,一边学一边使用这些工具分析代码,能加深对语言的理解。

六、多练习、多实践

就象学自然语言一样,如果只知道语法不去练是没有任何效果的,只有反复地练习,慢慢才能变成自己的一项技能。书本上的例子代码最好能从头到尾亲自敲一遍,多运行、多尝试,另外再找一些题目来练习,如能有机会参与项目开发则更好啦,勤动手、勤实践是最好的学习方法。

其它的方法还有:

做好笔记,把学习中遇到的关键点和自己的思考记下来,便于后面复习和对比;

复习,学习一定要重复、重复、再重复;

学习贵在坚持,每天学一点(比如坚持每天学 1 小时),日积月累。

⑥ Java中求平方以及立方的函数式什么

Math.pow(x,2)就是平方。Math.pow(x,3)就是立方。

Math.pow(底数,几次方),如:double a=2.0,double b=3.0,double c=Math.pow(a,b),就是2的三次方是多少;c最终为8。

(6)java函数式编程例子扩展阅读:

Math.pow()函数返回基数(base)的指数(exponent)次幂,即base的exponent次幂。Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。

Java编程工具如下:

1、Eclipse:一个开放源代码的、基于Java的可扩展开发平台 。

2、NetBeans:开放源码的Java集成开发环境,适用于各种客户机和Web应用。

3、IntelliJ IDEA:在代码自动提示、代码分析等方面的具有很好的功能。

4、MyEclipse:由Genuitec公司开发的一款商业化软件,是应用比较广泛的Java应用程序集成开发环境 。

5、EditPlus:如果正确配置Java的编译器“Javac”以及解释器“Java”后,可直接使用EditPlus编译执行Java程序 。

阅读全文

与java函数式编程例子相关的资料

热点内容
dos命令中提示拒绝访问 浏览:269
js调用java后台方法 浏览:307
我的世界命令教程 浏览:381
程序员生活中的自律习惯 浏览:160
java中编译与加载 浏览:566
正版秒赞源码官网 浏览:102
android云盘开发 浏览:963
139邮箱的发送服务器地址 浏览:826
长沙银行用什么样的APP 浏览:891
无忧推客源码 浏览:463
怎样用文件夹发微信上去 浏览:426
单片机movp1a什么意思 浏览:579
plc编程龙门铣床 浏览:375
毕业做程序员好吗 浏览:717
python最好的web框架 浏览:233
程序员同学玩腾讯 浏览:349
pdf扫描压缩 浏览:164
程序员面试学历太重要了 浏览:420
excel转pdf不全 浏览:513
命令任务管理器 浏览:208