java接口该怎么学才能如何快速学好java

为维护健康文明的社区氛围,请不要发表具有谩骂,诽谤,广告,宣传等内容的言论。
输入验证码
Va的资料(833)
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011
上传者:Va
上传时间:08/26/2011如何自学 Java 开发?
985本科,还有4个月毕业。本科期间比较迷茫、任性,方向搞不清走了点不得不走的「弯路」,现在终于逐渐理清头绪,在为毕业后的求职做准备。自己打算是搞移动开发(虽然听朋友说这方面现在油水不是很多了,推荐我学好 C++ 搞游戏开发,但是楼主真的不喜欢搞那种大型游戏网游什么的,因为我自己曾经就身陷其害啊!我比较喜欢和朋友聚一起玩玩玩桌游,所以将来能设计款好的桌游我会很高兴的哦*^__^* )方向,我综合了下决定往安卓方向发展,所以现在打算自学 Java。我本科有 C++ 的基础,学过数据结构和 STL 应用,我就想请问下各位我在未来的 4 个月或者半年内甚至更长远的安卓开发方向的路线指导下(比如我学 C++ 得注重「不限于语言语法的基础」:如内存管理,还有数据结构算法、STL 等等),那么1、我现在学 Java 应该注意些什么「不限于语言语法」的基础呢?为了近期能更好的求职,我还应该学习哪些知识看哪些书呢?2、我知道学好学精任何东西都需要刻苦努力的,我不甘心一直做底层的「码农」!那么对于将来的 Java/Android 长期发展来看我还应该在工作后学习储备哪些知识、技能呢?数据结构算法和OS、编译原理这些基础还需要看懂还是熟悉、精通?好多朋友都说工作后很少用到这些大学学的知识了,什么算法更是用的可怜,我凌乱了。
先来回答问题1、我现在学 Java 应该注意些什么「不限于语言语法」的基础呢?为了近期能更好的求职,我还应该学习哪些知识看哪些书呢?因为也是面试官,所以尝试给一些建议。首先 还是要重视基础,越是大公司,越注重基础考察,因为实际上他们并不需要你来了就能干很多活,他们需要的是你的学习能力,是否聪颖,以及未来的潜力。基础比如:操作系统、网络、算法数据结构、离散数学、数据库原理与实践,这些看起来枯燥而无味的基础科学,是我目前感到知识最为匮乏,但却最为急需的部分,要了解它们是必须付出非常多的时间才有可能理解通透些。而这些基础的扎实程度,就直接决定了你的高度。而在中小型公司,有可能更需要的是你来了就能干活,这样的话,学习一些ssh html css android的技能会有助于你快速找到工作。2、我知道学好学精任何东西都需要刻苦努力的,我不甘心一直做底层的「码农」!那么对于将来的 Java/Android 长期发展来看我还应该在工作后学习储备哪些知识、技能呢?数据结构算法和OS、编译原理这些基础还需要看懂还是熟悉、精通?人的精力是有限的,然而知识是无限多的。 需要不断地投入时间来持续学习。至于要学什么? 这取决于你未来想从事的方向。而如果你希望获得未来什么方向更靠谱? 这个问题我其实无法回答你,每个行业都能出状元。 从我对人的理解来说,人最重要的能力,就是把一件社会有需要,别人做不到的事做成的能力,这里面体现了两个关键的概念: 1) 客户需要 2) 稀缺性 。 所以相信你也就能立刻明白我为什么无法对未来作出预测咯,极端情况下,如果所有的学生都听了我的建议,选择了一个方向,那么这个方向必然的就不会很稀缺。从我自己的Java之路来看,最感谢还是阿里巴巴能够给我们这些技术人员创造出这样有挑战的业务场景和业务需要,无论是淘宝,天猫,阿里云还是菜鸟,都有无数的技术难题等着我们去解决,而解决这类问题,可以影响到很多人。也感谢有这样一群人能够为了这个目标一起努力到现在。能够跟这些大牛们一起工作,耳濡目染,不断提高,是我的工作生涯中最为宝贵的一笔财富。
Java Web前端技术Java Web初级内容Java Web进阶阶段Java Web项目实战Java Web拓展
非常感谢知友们的60个赞。写这个回复已经有一个月了,期间学习计划和方式有了很多的变动,最近事比较杂,心比较乱,本来是不打算更新回复的。但是还真怕一些想入门学习编程的朋友看我回复之后会被误导,还有就是评论区一些留言的原因所以就更新一下吧。
请记住一句话:别人的终归只是建议,最后的决策还得自己下。
读书第一遍:好像是这样。第二遍:原来是这样。第三遍:没错,就是这样。对于一本新书来说,读完这本书很容易,但是记住里面10%的内容却是很难。
没有任何一个技术不是经历了大牛们的奉献和时间的洗礼。所以至此时为止之前所说的任何技术,甚至一直学的java语法也都不敢说“精通”二字。
每个人的学习路线是不一样的,都是一个探索的过程。出错走歪路在所难免。这里只是说一下自己从一无所知到现在有些基础之间的经历经历而已,没必要非要,也不可能硬搬到另一个人身上。至于说我明显不够踏实。这个还是比较认同的。但是有些原因在里面,之前学了jdk的并发类,一直对它的实现原理感到困惑,如果追的话就会追到本地方法。所以就想了解一下操作系统是怎么实现的,之后还发了这个问题: 悉心指导有之,一笑而过有之,出言讽刺有之。但是取精华弃糟粕,可以总结为大牛们还是很不建议现在学那个的,所以就暂时阁下了。
至于Redis的话 这里有全部的中文注解结合《Redis设计与实现》应该是可以一看的吧。Redis是非常重要的,不管是存储数据还是充当各种情况的key-value缓存都是相当棒的,而且暂时片面的认为Memcached可以大致上看成是Redis的一个子集。至于它们涉及到的单线程或者多线程,网络连接库,内存压缩之类的不同,我只想说自己目前只有学的份没有评价的资格。我只是暂时是这么认为的,也许明天我学了一些东西,后天就不这么认为了。
还有就是:“至于二本去bat大把吧,找个内推就能过简历了” 这个还真不知道,下面是自己简历的一点内容,和这份简历在拉钩上投出去的效果,仅供参考。
不知道会不会有人认为自己是在知乎上卖萌求大神点赞获取就业机会的。想说的是现在已经得到了一家挺出名的视频公司许诺的offer,只要学校现在让出去实习的话,我是可以出去的。最近事比较多,脑子也乱。待安定下来之后一定会好好反思。总结一下自己之前的思路,和以后怎么发展。-----------------------------------------------------原回答如下-------------------------------------------------如果你一点基础没有的话可以试着走走下面的javaweb路子:1&毕向东的java视频看两遍2&javaweb,struts2,spring,spingmvc,hibernate,Mybatis学完试着用版本控制软件和UML3&毕向东的视频看一遍4&《thinking in java》5&《深入理解java虚拟机》6&《how tomcat works》7&《struts2技术内幕》8&《sping技术内幕》9&将web基础与这些框架源码相结合整理思路,翻阅tomcat,sping,struts等框架源码理解设计思路10&并发编程网各种好的文章,如果可能自己试着实现11&自己写个mvc出来12&《数据结构与算法分析java描述》13&《高性能MySQL》前几章14&《MySQL技术内幕Innodb存储引擎》13&《鸟哥的Linux私房菜》14&《计算机网络自顶向下》15&《深入分析javaweb技术内幕》并没有写《算法导论》《深入理解Linux内核》等经典的大神级别的书籍,可见自己还是很菜的,但是一直在向那方面努力。咱们还是在一条起跑线的,就是看你之后怎么选了。这条javaweb路线亲测是可用的。985高校,占很大优势,基本上走完第二步就会有很多公司要你了,然后继续走完下面的。不像我一个普通二本,今年春招投了N个简历没一个回的。这样也好,反正是大三也不是太急,有时间再充半年电。现在在学c++ primer plus,试着debug Redis源码,还在看《Linux内核设计与实现》,跟着mit课程学习写操作系统。计划学习王爽老师的《汇编语言(第3版) 》。当你真的入门之后自己就知道学什么了。其实吧,我感觉基础真不是什么问题,最主要还是自己是不是真的想学。很多人学完ssh就去公司实习做项目去了,没事了看个电影旅个游之类的。几年之后几乎都转行了。不想一直做码农真的不是一句话能表达清楚的,你得拿行动来诠释。
看马士兵老师的全套视频今天在复习抛出异常这一节,翻出来了马士兵老师举的例子,简直了!把error比做山崩了,能力范围之外的异常,unchecked的比做小石子,可抛可不抛,checked比作刹车片坏了,内里之内的必须抛出的!仔细想想,马老师简直了!
刚入门的后台几大框架必须学习,springmvc/struts2,spring,mybatis/hibernate,项目管理maven,版本控制svn/git,前台js,jquery要学好,css,html要熟悉。整个过程中基础要不断的复习巩固,每学习一段时间就回头看看基础,就会发现自己的不足。接下来学学linux方面,部署、运维。tomcat,apache,nginx都要接触到。大学学的东西是给你一个适应的过程,工作后更多的是一个学习方法的培养,比如新技术要怎么快速上手,学过的东西如果忘了要怎么迅速复习,不会的东西要怎么搜索。这些都是慢慢来的,不要急。java这么多年了需要学习的东西很多,很杂。不要一口吃一个胖子,一点一点的。隔一段时间审视一下自己,看看都掌握了什么,接下来需要学习什么。
推荐一个视频,是我自己录制,作为java入门再好不过了。
先把Java的缺点认识一下,对以后写好的Java程序是很重要的,当然如果你对Java没有爱的话,看完这些对你提高生活质量也是有帮助的。
写过java swing ui,然后写web,然后又写android,感觉没有事件和异步模型编写GUI类应用真的不是很方便,经常发现为了处理用户交互事件一个类要实现一大堆接口。但android用java作为开发语言已经这么久了,也没有其他更好的选择。既然想做android开发,而且时间不太多了,服务器端的东西java EE相关的东西都可以暂不涉及,例如SSH。先专注java基础。另外GUI程序没有异步模型的,多线程是必须要掌握的。网络编程方面也要掌握,不管是rest api请求还是socket,现在几乎少有不联网的单机app了。然后看看google官方的android教程,如何管理布局,管理资源,自适应不同的屏幕尺寸,fragment的管理,动画效果等等。然后其他的等你具体开发app的时候还会用到更具体的知识,比如绘图api。这方面就是不断学习的过程了。
update:鉴于有童鞋问到选PHP还是选JavaWeb的问题,在这里我就简单的说下自己的看法,希望对你有帮助。在我自己看来,这二者是没什么区别的,我觉得程序员最重要的是学习能力,而语言只是工具。无论是从找工作来讲还是易学程度来讲。工作好不好找大部分还是看个人能力。如果你还是想着蹭那点小部分运气,那你选JavaWeb吧,我室友最近在找工作,他跟我说招JavaWeb的特别多。至于Android和JavaWeb,抱歉,Android行情我不怎么了解,所以这个回答不了。-------------------------------原答案------------------------------------回答之前我来吐槽一下知乎上的某些人也真是够了,题目都不看清就在这里瞎扯淡。楼主就剩下了4个月的时间毕业,还有人推荐Scala/Clojure/Groovy的,呵呵,楼主要是真学了这些,我怕4个月后楼主连工作都找不到。更何况人家想搞移动开发,喜欢桌游。下面正题吧我觉得楼主还有4个月的时间还是挺短的,如果你真的喜欢搞移动开发的话,你应该把你的计划拉长到3-5年,而把这4个月的准备当作一张入场门票,也就是说你得先进这个行业,进了之后,你才有考虑更深层学习的机会。而4个月对于入门Android来说,时间还是够的。所以我的意见是,1)为了近期能更好的求职,现在学Java/Android不需要注意什么,只需要学,熟悉Java语法,熟悉api,学的过程要多写。然后多找些Android的项目做。2)不用看数据结构,不用看操作系统,算法之类的,这些东西在你工作的前一年内JavaAPI都能帮你搞定。这些都留到之后你知道这些东西学了对你有什么用,能做什么之后再去学。3)任何一门语言都是有缺点的,先不用去管Java缺点,等到你真正发现Java的缺点对你未来有影响时,语言对你来说已经不那么重要了。4)自学有两个好处:一是学到技能,二是提高学习能力,在IT行业来看,后者比前者更重要。
80G学习视频拿走。。。有各种语言的。。选一种你想学的。如果是学android的话,可以关注我的公众号,最近正好打算写40篇android新手文章,结合实际工作中的经验进行总结。。
已有帐号?
无法登录?
社交帐号登录& & & 为了巩固自己学习的知识,可能会对自己以后所学的知识做一个小结,今天就来一篇接口的定义与实现。
& & & 在java中,我们可以通过继承得到另一个类中的方法,但是这个仅仅满足继承一个方法,那有办法可以多个继承不,就好比,我们人类的基因,总有一部分是继承爸爸,一部分是继承妈妈,而java中有是单继承,那我们怎么办解决?java中就用接口的方式来解决,实现接口,就可以实现所谓的多继承
看下面的例子,我在例子中举出他的特性
package com.
* 接口最大的好处就是多继承
* 他的特性Java接口可以有public,静态的和final属性,也可以默认不带
* 默认方法就是抽象的(abstract)
interface home{
public void refrigerator();//方法不能写实现Java接口可以有public,静态的和final属性。它等同于 //
static final refrigerator();
void chest();// 接口没有构造方法,也不能被实例化的
public void fruit();
void rice();
* 我们来实现这个接口
* @author jun
*1.我们创建一个人,并建一个name的方法
*2.我们创建一个boy
*3.boy分别去实现(多继承)eat和一个home这接口
public void name(String name){
this.name=
//可以继承一个类,并且还可以实现这两个接口,接口只能用implements来实现
class boy extends person implements eat,home{
//实现的时候,子类必须实现父类的所有方法,所以就有了下3个方法
public void refrigerator() {
// TODO Auto-generated method stub
System.out.println("这个是个冰箱");
public void chest() {
// TODO Auto-generated method stub
System.out.println("这个是个衣柜");
public void fruit() {
// TODO Auto-generated method stub
System.out.println("这是水果");
public void rice() {
// TODO Auto-generated method stub
System.out.println("这是米饭");
public class Imptents {
* @param args
* 现在到了我们调用的时刻了,我们的方法只能调用它自己里面的方法
public static void main(String[] args) {
// TODO Auto-generated method stub
home h=new boy();
h.refrigerator();
h.chest();
e=new boy();
e.fruit();
阅读(...) 评论()java 接口学习_Java_何问起
您的位置: -
java 接口学习
你应该知道接口是一种契约,它与实现方式无关
但是类,即使是抽象类,你都能自定义成员变量,而成员变量往往就与实现方式有关。
这一点的实际意义不大。
但是有一点,类会暴露太多不必要,甚至不能暴露的东西,你看一下java.util中,大部分的数据结构,都被设计成了接口-抽象类-最后实际类
例如Collection-List
L-AbstractCollection
L-AbstractList
L-ArrayList
但是有一个,由于历史原因,被设计成了类,比如Stack extends Vector,你应该知道Stack的数据访问模式,就只能是LIFO,但是Vector是一个List,可以随机访问,可以任意增减。
结果Stack s = new Stack();
不光能够pop/push/peer还能add,get,set,remove
如果你用一个接口IStack 里面只有pop/push/peer方法,然后仍然通过继承Vector的方式实现,
IStack s = new MyStack();
此时,就无法add,get,set,remove
举个生动一点的例子
public interface BritishSpy {
public String speak(); //英国间谍讲英语
public interface GermanSpy {
public String sprechen(); //德国间谍讲德语
public class DoubleAgent implements BritishSpy, GermanSpy {
public String speak() { return "Hello"; }
public String sprechen() { return "Gutentag"; }
public class Agency {
public static void toMI5(BritishSpy spy) {
//军情5处当然只能说英语,做英国间谍
spy.speak();
//spy.sprechen();不可见
public static void inGermany(GermanSpy spy) {
//spy.speak();不可见
spy.sprechen();
public static void main(String[] args) {
DoubleAgent da = new DoubleAgent();
BritishSpy es = (BritishSpy)
GermanSpy gs = (GermanSpy)
toMI5(da); //MI5也不知道他是一个双重间谍,只知道他是BritishSpy
toMI5(es); //更安全
//toMI5(gs); 不可能
inGermany(da); //在德国还是安全的,德国人不知道他的双重间谍身份,只知道他是GermanSpy
inGermany(gs);
//inGermany(es); 不可能
假设你只用class,因为不能多重继承,所以,speak()/sprechen()比然声明在同一个class里面
public abstract class DoubleAgent extends Spy/**(略...)*/ {
public abstract String speak();
public abstract String sprechen();}
public class PoorDoubleAgent {
public String speak() { return "Hello"; }
public String sprechen() { return "Gutentag"; }}
晚了,不管你PoorDoubleAgent a = new PoorDoubleAgent();还是DoubleAgent a = new PoorDoubleAgent();,全世界都知道他是一个双重间谍,他到哪里都必死无疑前面举了一个关于&安全性&方面的例子
接口只暴露给对方(比如Agent的军情5处方法)它所需要的足够信息,其他无关的,甚至有害的信息不会暴露给对方。因为,我传给你的是接口类型,我除了是这个接口(和这个接口的父接口,inteface A extends B, C)的实例外,你顶多知道我是一个Object(不是int:P),其他的姓甚名谁,哪里住址,父母安好,兄妹几何都与你无关,我们只需要关心我们签订的合同(接口)&
再举一个有关灵活性方面的例子
假设某公司已经有一个更新过N代的,逻辑复杂无比public class A extends B /** where b extends c, c extends d and so on... */ {
public void init() {...}
public void release() {...}
public String doXXX() {...}
public String doYYY() {...}}
而这个A又被很多类继承或使用,doXXX/doYYY 方法已经无法更改
假设现在这个公司要参加某个标准化组织,而这个组织要求所有提供这样的方法
String getXXX(); String getYYY();
加入用接口标准化组织只要规定成员们都实现public interface IBusiness {
String getXXX();
String getYYY();}而这个公司只需要稍微改写一点点即可public class A extends B /** where b extends c, c extends d and so on... */
implements IBusiness {
public String getXXX() { return doXXX(); }
public String getYYY() { return doYYY(); }
public void init() {...}
public void release() {...}
public String doXXX() {...}
public String doYYY() {...}}
这样既满足了标准化的要求,又满足了无需修改原来继承A或者使用A的无数个class(有些可能在用户那里,不可能更改)
假如不用接口,你有两个选择:数典忘祖或者自绝于人
数典忘祖:你的新A必须继承标准化组织的Business,原来a,b, c d...里面的代码全部得重新组织到这个新的A里面,与此同时,那些调用或者继承A的class难保不需要重写
自绝于人原来的就让它去,谁也别再提它了,我们以后就用新的NewA,结果,你的新客户倒是满足了标准化,你的老客户可就 :& :@ :$,而且以后需要维护A和NewA定义接口:interface Fight{
void fight();}
肥肥和瘦瘦去实现这个接口:class FatFat implements Fight{
public void fight(){
System.out.println("FatFat 打人很痛!");
class ThinThin implements Fight{
public void fight(){
System.out.println("ThinThin 打人一点都不痛!!哈哈。");
然后你可能会这另一个类中使用到FatFat和ThinThin的对象,然后都去执行fight,但是你可能不到运行时就不会知道是具体的那个类的对象,这是你就感谢他们都实现了Fight接口,你可以向上转型,然后通过运行时的多态产生你想要的行为。
Fight a=new FatFat();Fight b=new ThinThin();a.fight();b.fight();这样就会执行不同的动作。
或者如果你有一个方法f(Fight i){
i.fight();}
如果c是实现了Fight接口的其中一个类,那么你就可以这样使用这个方法:f(c);你不需要知道c究竟是什么对象(不管是FatFat还是ThinThin),你都可以得到你想要的fight动作Java学习网()提拱教你在Java接口中定义方法基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。但是在JDK8里面,你是可以突破这个界限的哦。假设我们现在有一个接口:TimeClient,其代码结构如下:import java.time.*;public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();}接下来,SimpleTimeClient类实现了TimeClient接口,具体代码如下:paimport java.time.*;import java.lang.*;import java.util.*;public class SimpleTimeClient implements TimeClient {
private LocalDateTime dateAndT
public SimpleTimeClient() {
dateAndTime = LocalDateTime.now();
public void setTime(int hour, int minute, int second) {
LocalDate currentDate = LocalDate.from(dateAndTime);
LocalTime timeToSet = LocalTime.of(hour, minute, second);
dateAndTime = LocalDateTime.of(currentDate, timeToSet);
public void setDate(int day, int month, int year) {
LocalDate dateToSet = LocalDate.of(day, month, year);
LocalTime currentTime = LocalTime.from(dateAndTime);
dateAndTime = LocalDateTime.of(dateToSet, currentTime);
public void setDateAndTime(int day, int month, int year,
int hour, int minute, int second) {
LocalDate dateToSet = LocalDate.of(day, month, year);
LocalTime timeToSet = LocalTime.of(hour, minute, second);
dateAndTime = LocalDateTime.of(dateToSet, timeToSet);
public LocalDateTime getLocalDateTime() {
return dateAndT
public String toString() {
return dateAndTime.toString();
public static void main(String... args) {
TimeClient myTimeClient = new SimpleTimeClient();
System.out.println(myTimeClient.toString());
}}现在假设你想在接口TimeClient中添加一个新功能,通过这个功能我们可以指定我们所在的时区。public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
ZonedDateTime getZonedDateTime(String zoneString); }随着TimeClient的变化,你不得不修改你的SimpleTimeClient类,实现getZonedDateTime方法。一般来说,设置时区这个功能会是各个TimeClient实现类中通用的一个功能。这个时候,你通常会选择再定义一个AbstractTimeClient类来实现getZonedDateTime方法。而在JDK8中,你可以选择直接在接口中来实现该方法(interface已经把手伸到abstract class的地盘了)。paimport java.time.*;public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
static ZoneId getZoneId (String zoneString) {
return ZoneId.of(zoneString);
} catch (DateTimeException e) {
System.err.println(&Invalid time zone: & + zoneString +
&; using default time zone instead.&);
return ZoneId.systemDefault();
default ZonedDateTime getZonedDateTime(String zoneString) {
return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
}}从上面的例子,我们可以看到通过static和default修饰符我们可以直接在接口中实现方法体,同时不要忘记,任何在接口中方法声明都是public类型的哦。OK,现在我们需要一个新的接口:AnotherTimeClient,它得继承TimeClient接口。那么,对于TimeClient接口中定义的getZonedDateTime方法,你可以做如下三种处理:重新声明getZonedDateTime方法,使它变成abstract类型。重新定义getZonedDateTime方法。直接继承。而static方法和我们在类里面定义的static方法概念一致。分享是一种美德、关注是一种智慧&&请↙↙↙点击“阅读原文” ….
看过本文的人还看过
Java学习网的更多文章
大家在看 ^+^
推荐阅读 ^o^
婚姻这道题,你解好了吗?
图观 | 看完这组明星对比图,你会觉得“岁月是把杀猪刀”这句话更适合男人……
很多人许多事,心里明白就好
老妈与老婆的六大区别……!
猜你喜欢 ^_^
24小时热门文章
微信扫一扫
分享到朋友圈}

我要回帖

更多关于 如何快速学好java 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信