很多人学习Java,尤其是自学的人,在学习的过程中会遇到各种各样的问题以及难点,有时候卡在一个点上可能需要很长时间,因为你在自学的过程中不知道如何去掌握和灵活运用以及该注意的点。下面我整理了新手学习可能会出现的问题。
Java8在线API参考文档:https://docs.oracle.com/javase/8/docs/api/
从配置JDK开始
很多人在这块通过会遇到一些问题,照着视频配置了,但输入java和javac命令还是没有反应,没有打印java相关的信息。注意点有下:
以上是需要注意点。如果你配置的和以上一致,应该是不会出问题的。
Java8的下载链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
从第一个Hello World开始
配置好环境变量后就开始了第一个HelloWorld,很多视频第一讲都是用记事本写的,用javac编译和java命令去运行,其实这样一来很在很大程度造成一定的错误,记事本会出现很多问题,没有代码语法提示,写错了也不知道,如果会用编辑器,建议去用编辑器。如果不会用,跟着视频一步一步来也没有关系,一步一个脚印,走向巅峰。学习到这块应该理解javac和java命令运行的原理。
从Java的语法变量开始
每个编程语言都有对应的语法要求,Java也不例外,相对于其他的,Java学习起来也不难。学习这块主要理解各种数据类型的最大值和最小值是多少,长度是多少,每种数据类型都有什么用处。我们来看一下Java里边对应的数据类型有那些。
掌握好数据类型后学习如何定义类型变量,以及变量的使用。学习Java中的常量。
从一个注释开始
任何编程语言都有自己独有的注释风格,但是多多数注释格式都是通用的,Java里边常用的注释有如下几种:
/**
* 这种我们称为类注释
* 在类上面写
*/
public class Main(){
/**
* 这种注释我们称为字段注释
*/
private String username;
//这种我们成为单行注释
public String password;
/**
* 这里是方法注释,写在方法按上面
*
*/
public static void main(String[] args){
}
}
从一个运算符和表达式开始
运算符在很多编程语言里边都存在,而且大多数都是相通的,用的最多的有+、-、*、/、++、--等。
表达式这块也比较简单,,表达式是由变量或常量与符号的组合,比如 2+2 > 3 这就是一个表达式,如果成立是true,否则为false,与之对应的还有三元表达式。3 > 2 ?1 : 5 意思是3如果大于2,就返回1,否则就返回5。
运算符和表达式这块需要多练习,多做题,加深理解,熟能生巧。
位运算是什么?
位运算在很多编程语言里边都是存在的,这块也是计算机基础里边讲的比较多的。学习应该注意如下:
掌握好以上几点就可以了。
开发神器 Eclipse
Eclipse可以说Java开发的必备工具,当然还有MyEclipse和NetBeans,近几年又出来一个比较火的Idea,用的人也是很多的,占用市场份额非常大。但是我还是推荐用Eclipse,这个工具简洁简单,占用系统内存不大,很轻巧的一款工具。Eclipse使用也非常简单,这里建议大家下载最新的zip包,解压后直接就能用,如果下载安装版本,安装过程会比较长,而且还得你电脑网速好,这个是eclipse zip包的下载链接:http://mirror.kakao.com/eclipse/technology/epp/downloads/release/2019-03/R/eclipse-jee-2019-03-R-win32-x86_64.zip,eclipse的使用教程网上有很多,这里不在整理,如果你在看视频,相信视频里也会做一个详细的讲解。有些人在这块可能遇到各种各样的问题,从网上下载下来后打不开,双击会报一些错误,这种情况的原因有很多种:
以上两点就是容易出问题的所在,大多数是因为环境变量没有配置正确或者配置少了而导致的。
大家在使用Eclipse创建项目的时候把项目编码一定要改成UTF-8,创建项目后第一步就是先修改项目编码,这点非常重要。
从条件语句开始
所谓的条件语句就是判断语句,java里边常用的判断语句有:
以上就是Java里边比较常用的,这块需要多练习,多掌握,孰能生巧,特别需要注意的是if里边的表达式可以是多个,也可以是一个。这块需要加深理解。
从循环开始
循环可以干很多事,基本上只要是写程序,百分之八十都离不开循环,那么学习循环主要有应该学习那些呢,
从命名开始
类、包、方法、字段的命名可谓是大有学问,命名一定要见名知意,这块也是比较重要,是属于门面的东西,具体可以看我这篇文章 https://blog.csdn.net/qq_24434671/article/details/88532596 里边有详细的对命名的一些规范。
从数组开始
数据可以说是任何编程语言都固有的一个结构类型,用途可谓是非常广。用的也比较多,学到这块应该学的内容有如下:
面向对象 重点中的难点
面向对象是很多初学者很头疼的一个问题,里边的多态集成向上转型或者向下转型这些多有些人来说是非常难以理解的。
我们来看看什么是面向特性,面向对象的特性一共有四个:
下面我们具体来说说
抽象
抽象可以分为过程抽象和数据抽象
封装
封装就是把过程和数据包围起来,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取
继承
一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类).派生类可以从它的父类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要.因此可以说,继承为了重用父类代码,同时为实现多态性作准备.
多态
多态是指允许不同类的对象对同一消息做出响应.多态性包括参数化多态性和包含多态性.多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题.总的来说,方法的重写,重载与动态链接构成多态性.java引入多态的概念原因之一就是弥补类的单继承带来的功能不足.
动态链接 -->对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接
Java是一门面向对象(OOP)的编程语言,但是与之对应的我们知道有的是面向过程(POP)的编程语言。那么这两种有什么不同之处呢。
面向对象(OOP)
面向对象pop(Process-oriented programming)的缩写,“面向过程”是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数把这写步骤实现,并按顺序调用。
面向过程(POP)
面向过程oop(Object Oriented Programming)的缩写面向对象:用线性的思维。与面向过程相辅相成。在软件开发过程中,宏观上,用面向对象来把握事物间复杂的关系,分析系统。微观上,仍然使用面向过程。”面向对象“是以“对象”为中心的编程思想。
学习面向对象这块应该注意和需要学习的点有如下:
以上就是学习javase这块比较重要的又需要掌握的知识点。
理解什么是接口
接口单独拿出来说一下,因为他也是非常重要的,接口的关键字是interface,下面我们来看学习接口应该注意是什么?
学习接口掌握好以上几点就行了。后面在慢慢的深入了解。
从内部类开始
说到内部类,很多人可能会觉得熟悉而又陌生,内部类平时用到的场景不多,用得最多的是在有事件监听的情况下。下面我们来看看什么是内部类,在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:
下面我来看下对应的具体的代码实现:
//1、成员内部类
class Person {
private String username = "";
public static int pw = "12";
public Person(String username){
this.username = username;
}
}
class Stu {
public void getStuName(){
System.out.println(username); //外部类的private成员
System.out.println(pw); //外部类的静态成员
}
}
/*
类Stu像是类Person的一个成员,Person称为外部类。
成员内部类可以无条件访问外部类的所有成员属性和成
员方法(包括private成员和静态成员)。
不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,
会发生隐藏现象,即默认情况下访问的是成员内部类的成员。
如果要访问外部类的同名成员,需要以下面的形式进行访问:
外部类.this.成员变量
外部类.this.成员方法
外部类如果要访问内部类的话就必须new内部类的对象来调用
*/
=================================================================================
//2、局部内部类
class Person{
public Person(){}
}
class Test{
public Test(){}
public People getP(){
class P extends Person{
String name = "xx";
}
return new P();
}
}
/*
注意,局部内部类就像是方法里面的一个局部变量一样,
是不能有public、protected、private以及static修饰符的。
局部内部类是定义在一个方法或者一个作用域里面的类,
它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
*/
=================================================================================
//3.匿名内部类
bt.setOnClickListener(new OnClickListener(){
public void onClick(View v){}
})
/*
匿名内部类应该是平时我们编写代码时用得最多的,
在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。
匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,
所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。
匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,
匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,
只是对继承方法的实现或是重写
*/
=================================================================================
//4.静态内部类
class Person {
public Person(){}
static class Stu {
public Stu(){}
}
}
/*
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。
静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的
非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,
可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,
因为外部类的非static成员必须依附于具体的对象。
*/
学习内部类应该学习的问题有如下:
从枚举开始
枚举这个概念在javase里边用的不多,但是在后面的学习中可以说是用的比较多的。枚举是在JDK1.5引入了新的类型,之前我们定义常量都是
public static final String CURR_USER = "username"
这种其实是不安全的,因为他是String类型的,开发者有可能传入错误的参数,这个时候就会造成一些问题。那么有了枚举,边可以很方便的解决这个问题了,而且枚举的值是可以反射得到的。这点也是最重要的。下面我们来看:
public enum Color {
RED, GREEN, BLANK, YELLOW
}
public enum Color2{
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
}
如果要用的话直接Color.RED 就可以了。枚举的写法是多样的。下面我们来看学习枚举主要应该掌握哪些:
学习枚举掌握好以上的就差不多了,后面会进行更加深入的学习。
Java的常用类库(Date类)
不管是做什么,都需要获取系统的时间,那么Java也为我们提供了相应的类,就是Date类。学习Date类需要掌握:
Java的常用类库(Calendar类)
这个类是一个日历的类,表面意思理解,Calendar类也是比较常用的。主要用来计算日期,比如今天+180天后是什么日期。该类是个抽象类,不能直接new,得通过Calendar.getInstance();来获取他的对象。学习该类主要掌握以下点:
Java的常用类库(SimpleDateFormat类)
这个是java里边一个格式化日期的类,用的频率也是非常之高的。所以掌握这个也是很有必要:
SimpleDateFormat其实主要的就是这两个方法,掌握好就行
Java的常用类库(StringBuilder类和StringBuffer类)
StringBuilder和StringBuffer在字符串拼接方面可以说是用的比较多的,还有个String类,既然说到这里了,我们来做个对比。
首先从执行速度来说的话:
这里可能会有人问,String为什么是最慢的一个呢?String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
知道了以上的区别那应该掌握一下点:
StringBuffer和StringBuilder类用法其实并不复杂,主要弄清楚两者的区别就行,这个在面试的时候有可能被问到。
Java的常用类库(Math类)
Math类里边提供了一些常用的数学函数,都是静态方法,用的也是很多的,主要掌握有:
以上就是Math类比较常用的API,熟悉掌握就好。
从解析XML文档开始
很多人可能都不知道xml是什么,我们一起来看下:
xml常用于数据存储和传输,文件后缀为 .xml;是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。如何定义这些标记,既可以选择国际通用的标记语言如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML设计用来传送及携带数据信息,不用来表现或展示数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。而HTML语言则用来表现数据。接下来我们看下xml的格式什么?
计算机
2019-12-12
1211
机械
2019-11-12
2333
以上就是一个标准的xml格式的文档,顶级标签是school,school里边有专业。
那么我们在java里边如何读取xml呢,通常用四种解析工具,分别是:
上面四种就是经常用来解析DOM的工具。每个工具各有利弊,大家可以去看看。四种工具中任一选择一种进行学习。
学习完应该掌握:
对XML学习会以上三点基本上就差不多了。
从集合开始
集合可以说是java里边用的最多的一个了。说起集合就要说Collection接口了,集合的顶级接口。学习这块应该掌握如下:
以上是三大接口,都继承自Collection接口。
以上就是比较常用的,用的最多的是ArrayList,HashMap、主要学习有下:
以上就是学习集合需要掌握的点。
从IO流开始
说起IO流,很多同学都知道,但是IO流的具体操作可能就不太清楚了,不过么有关系,JAVA程序通过流来完成输入/输出。流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式。这样就意味一个输入流能够抽象多种不同类型的输入:从磁盘文件、从键盘或从网络套接字;同样,一个输出流可以输出到控制台、磁盘文件或相连的网络。下面我们来看:
IO流分为:
字节流
Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输入字节流和输出字节流。InputStream类与OutputStream类均为抽象类,我们在实际使用中通常使用Java类库中提供的它们的一系列子类。
字符流
Java中的字符流处理的最基本的单元是Unicode码元(大小2字节),它通常用来处理文本数据。所谓Unicode码元,也就是一个Unicode代码单元,范围是0x0000~0xFFFF。在以上范围内的每个数字都与一个字符相对应,Java中的String类型默认就把字符以Unicode规则编码而后存储在内存中。然而与存储在内存中不同,存储在磁盘上的数据通常有着各种各样的编码方式。使用不同的编码方式,相同的字符会有不同的二进制表示。
另外还有一个缓冲流,缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这时使用缓冲流能够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记得加上缓冲流提升性能。
那么我们应该来学习的与InputStream相关的流有:
与OutputStream相关的有
其他流:
想要加深学习的可以自己看看:
以上只是个人建议需要学习掌握的知识点,不是全部的。
从多线程开始
说到线程,很多人都会想到高并发。那么学习多线程该学习那些东西呢,我们来看:
我们都知道线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,一般来说继承Thread,不适合资源共享。实现Runnable接口的话,很容易实现资源共享。实现Runnable接口的主要优势有:
程序的main方法其实也是一个线程。在java中所有的线程几乎是同时启动的,至于什么时候,哪个先执行。完全要看谁先得到CPU的资源,在java中,每次程序启动至少启动2个线程,一个是mian线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM实习在就是在操作系统中启动了一个进程。
线程的状态有如下几种:
线程中常用的一些API有:
学习多线程,还得注意以下几点:
以上就是学习多线程这块需要注意和必学的知识点了。
从线程池开始
看了上面的多线程,大家可能很疑惑,什么是线程池呢。线程池是一种多线程的处理机制,主要是为了减少线程的频繁创建和销毁,从而提升系统效率。学习线程池,我们应该掌握以下几点:
以上就是学习线程池必须要掌握的点。
从泛型开始
泛型主要用在集合方面,例如 List
泛型掌握好以上几点就可以了。
从正则表达式开始
正则表达式不管在哪个编程语言都有,一般大多数用来匹配电话号码或者邮箱密码强度等。学习这块应该主要掌握:
以上就是学习正则必须要学的。
从注解开始
注解在框架里边用的可以说是非常多,所以这块也比较重要,这块的学习曲线也非常的平缓,我们来看:
以上是4个元注解,我们应该学习掌握:
以上就是java基础阶段必学的。当然注解的学习并不止于此,但是学完上面的足够了。
从反射开始
反射这块如果不写框架基本上上是用不到的,但是对于研究框架,那反射这块是必学的,我们来看看应该学哪些:
学习反射针对上面的内容应该有一个理解和编码实现。
从算法开始
Java是一门高级的编程语言,对很多算法的实现已经包装了起来,比如Arrays.sort()方法。这种就输入JDK底层给你实现了。
那么作为Java程序员到底应该不应该学习算法呢。对于程序员来说还是要学的,除非你不想进阶中高级程序员,不想当将军的士兵不是好将军。算法从另一个层面来标识了你的能力强弱,也是衡量一个程序员的标准之一。
一些常用的排序算法或者其他加密算法还是要会的,以下列举部分:
排序算法有:
以上的排序算法可以了解。
从Socket网络编程开始
很多同学学完javase,很纳闷socket是个什么鬼,其实像我们的qq,微信等都用了scoket技术。学习socket主要掌握的点如下:
以上是学习这块必须要掌握的关键点。学习完以后理解:
学习完这块内容应该具备:
学习这块应该注意:
以上就是socket通信方面该注意的点。
如果想深入学习Socket编程可以参考我这篇文章:https://blog.csdn.net/qq_24434671/article/details/89681472
从JSON开始
上面说了XML,这次说说JSON,JSON用的是非常多,主要用在HTTP RestFul接口中,大多数格式都是采用JSON格式传输的,所以掌握好这块是非常重要的。首先我们来看看JSON格式:
{
"username":"张鹏",
"password":"xxxx",
"childs":[
"小莉",
"小王"
]
}
以上就是一个标准的JSON格式,学习JSON我们需要掌握以下几点:
以上是需要注意的点,下面我来看看Java中常用的JSON解析工具都有哪些:
还有其他的一些JSON库,这里不一一诺列了,每个JSON处理起来的效率和性能都不一样。具体根据项目选型
扩展库 Jsoup
Jsoup一般会用来写爬虫,如果你学过html和Jq的话,就应该对Jsoup的方法很熟悉了,可以说是一个Java版的Jq,Jsoup是用于解析HTML,首先学习Jsoup,我们应该了解如下:
以上就是学习Jsoup应该掌握的内容。
从异常开始
异常贯穿着整个Java线,只要你是做Java开发的,那么你就离不开异常,下面我来看看学习异常应该掌握哪些东西:
以上就是学习异常该掌握的知识点。
文档未完......持续更新中
此文档为我多年工作经验的一个分享,希望对初学者有用。
有问题可以在下面评论,技术问题可以私聊我。