» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

java编程思想有一个例子没看懂,求指点。。。

posted by wap, platform: Android
引用:
原帖由 @yfl2  于 2017-7-6 10:54 发表
你可以关心,看它怎么调用的accept,这个过程本身的原理有啥疑问?

本帖最后由 yfl2 于 201776 10:55 通过手机版编辑
明白了。。。

因为书上没有直接写list函数到原型,且后面的文字提到了“回调”,然后又去找回调相关的概念,看的一头雾水

其实归根到底就是不知道list()内部调用了accept()而已。。。


TOP

posted by wap, platform: Android
引用:
原帖由 @cf3b5  于 2017-7-6 10:36 发表
File类就好像一个施工队,施工队里头有流程是筛沙(accept),原来有专人干这事,而且干这事需要有筛沙证(接口)!
现在有个新项目,要求有新的筛沙工艺,所以包工头(码农,就是你),找了个新人回来,名字叫DirFilter,你先让他考个筛沙证(继承接口),并让他学会新的筛沙工艺(实现accept方法),最后你把新人换掉原本的那个筛沙的哥们(path.list(new DirFilter()))
这样干活的时候,前一个环节的哥们把粗沙丢给这个新人,然后对他吼“筛沙”(调用accept),负责筛沙的新人就老老实实的按照他学的筛沙工艺筛沙,筛完的沙给下一个工人(return)……
这里头最大的优点就是,其实包工头也不需要知道施工流程究竟是怎样的,反正他知道,只要找个有筛沙证的哥们,并且告诉他新的筛沙工艺(实现accept),这包工队就会像以前那样工作!
其实面向对象开发里头,处处都是这种结构,简单来说,为什么要面向对象开发,要的就是这个目的!
这个意思我倒是能明白,但是自己设计的时候往往不太会写,想不到应该这么用。。。

还要多练习



TOP

虚拟内存的职业素养还是不错的


TOP

posted by wap, platform: Android
引用:
原帖由 @shixn  于 2017-7-6 11:19 发表
明白了。。。

因为书上没有直接写list函数到原型,且后面的文字提到了“回调”,然后又去找回调相关的概念,看的一头雾水

其实归根到底就是不知道list()内部调用了accept()而已。。。
所有我觉得莫名其妙,书上有没有让你定义File而是直接引用,你当然不可能看到list中的代码,你会奇怪为什么没有看到String的代码吗

TOP

posted by wap, platform: Android
之前用cpp和CS

string这种比较熟了,不用说也知道是java封装的

File只知道一些基本的,list第一次见。。其实只要多介绍一句也就明白了。。。而且后面的“回调”真的有点误导我了。。。(其实我现在也不太明白java的回调,java貌似没有委托,回头再琢磨吧)

TOP

觉得很复杂是吗?放弃java吧骚年,投入php怀抱吧,拥抱世界上最好的语言:D

TOP

引用:
原帖由 shixn 于 2017-7-6 12:28 发表
posted by wap, platform: Android
之前用cpp和CS
string这种比较熟了,不用说也知道是java封装的
File只知道一些基本的,list第一次见。。其实只要多介绍一句也就明白了。。。而且后面的“回调”真的有点误导 ...
说实话,您问的和File类本身没多大关系,而和OOP的基础知识有关。C#自不用说,plain c++里虽然没有显式的interface,但可以用全是纯虚函数的抽象类替代。所以恕我直言,您可能需要加强一下OOP的理解。比如基类继承和接口使用原则之类的基础概念。

java和c#语法有类似但也有不同。java没有委托,一般通过传入实现interface的类实例等方式来进行诸如回调等操作,在语法上可以使用local class/anonymous class来简化程序编写(类似c#里的匿名方法或lambda表达式)。所以从这个角度讲,java对interface的使用也许比c#更频繁一些。

[ 本帖最后由 hourousha 于 2017-7-6 17:11 编辑 ]

TOP

posted by wap, platform: iPhone
引用:
原帖由 @yzh  于 2017-7-6 13:45 发表
觉得很复杂是吗?放弃java吧骚年,投入php怀抱吧,拥抱世界上最好的语言:D
任何语言都要懂这个!

TOP

posted by wap, platform: Chrome
这本书虽然还有点用,但是真不如看现在的很多在线教程,我国的网络教育确实突飞猛进,很多概念都吃得很透了,而且理论结合实际,我觉得很不错。这本书你在十年前看用来入门还行,现在看可能感觉懂了,实际上动手就觉得不行了,有点像20年前的谭浩强系列

TOP

引用:
原帖由 jun4rui 于 2017-7-6 13:53 发表
posted by wap, platform: Chrome
这本书虽然还有点用,但是真不如看现在的很多在线教程,我国的网络教育确实突飞猛进,很多概念都吃得很透了,而且理论结合实际,我觉得很不错。这本书你在十年前看用来入门还行,现 ...
比谭浩强之流还是强的,起码不会出什么‘数组名就是指针’这种错误。

TOP

posted by wap, platform: Android
引用:
原帖由 @hourousha  于 2017-7-6 13:50 发表
说实话,您问的和File类本身没多大关系,而和OOP的基础知识有关。C#自不用说,plain c++里虽然没有显式的interface,但可以用全是纯虚函数的抽象类替代。所以恕我直言,您可能需要加强一下OOP的理解。比如基类继承和接口使用原则之类的基础概念。

java和c#语法有类似但也有不同。java没有委托,使用interface之类的来进行回调,此时可以使用local class来简化程序编写(类似c#里的匿名方法或lambda表达式)。所以从这个角度讲,java对interface的使用也许比c#更多一些。
没事,慢慢来。。

工作中写代码纯粹是当计算器用,几乎用不到oop。。。

TOP

posted by wap, platform: Android
其实我都不敢说自己会编程,充其量就是会写点代码。。。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @shixn  于 2017-7-6 14:03 发表
其实我都不敢说自己会编程,充其量就是会写点代码。。。
你也不用太谦虚,我见过不少在这行干了3,5年的照样不懂这些!纯粹就是拼代码…

TOP

posted by wap, platform: iPhone
引用:
原帖由 @shixn  于 2017-7-6 12:28 发表
之前用cpp和CS

string这种比较熟了,不用说也知道是java封装的

File只知道一些基本的,list第一次见。。其实只要多介绍一句也就明白了。。。而且后面的“回调”真的有点误导我了。。。(其实我现在也不太明白java的回调,java貌似没有委托,回头再琢磨吧)
你可以认为Java的Interface里的每一个方法声明就是C里的函数指针。
你写一个Class实现这个Interface就是让这个函数指针指向函数实体。

TOP

posted by wap, platform: iPhone
当你了解到Java的强大后你就知道安卓虚拟机是多么牛逼了,加油~

TOP

发新话题
     
官方公众号及微博