盘点Java学习中的干货以及踩过的坑———JavaSE篇

浅淡JAVA

互联网蓬勃发展的今天,一谈到编程语言,你可能会
首先会想到C/C++,但一谈到面向对象、找工作,首当其冲的就是JAVA,虽然现在还在不断涌现很多新的编程语言,像Python、Google Go、Apple’s Swift和Rust等等。

在这里插入图片描述
但是Java仍然是世界上最受欢迎的编程语言之一,有无限多种方法使用Java。

据估计,全球范围内有超过30亿部设备运行Java,超过其他任何一种语言。
在这里插入图片描述
而且根据2019年5月TIOBE指数,Java被评为最受欢迎的编程语言。

PS:TIOBE指数是从25个符合规范的搜索引擎分析语言的流行指数,指数越高越好。虽不能完全代表市场份额,但是可以反映一定时间段内语言的热门程度。具有一定的参考价值。

正传

言归正传,进入主题,下面我就来盘点一下我学习JAVA基础踩过的坑。

软件安装:

学习编程语言,首先要选择一种编程工具,这里我选择的是Eclipse(开源免费,使用简单,对初学者很友好),但是不同于C/C++等,JAVA 是运行在JVM(JAVA虚拟机)上的,故还需安装JDK(Java开发工具包)才能运行Java 程序,而在官网下载安装的JDK ,而安装JDK的时候还会默认安装一个单独的JRE(Java运行时环境),而这个需要单独安装的JRE就是我踩过的第一个坑。

关于JVM、JRE、JDK的关系如下图:

在这里插入图片描述
这个坑就是JDK里本来就包含一个JRE,而后单独安装的JRE不能放在前面安装的JDK的目录下,因为如果单独安装的这个JRE会和JDK中自带的JRE冲突导致不可用。

至于为什么官网下载的JDK包在安装的时候需要安装两个JRE(JDK自带的和单独安装的),原因如下:

  • JAVAHOME\jre1.8 \这样单独安装的jre 是给普通用户,和其它大多数的一般应用程序使用的java运行环境。
  • JAVAHOME\jdk1.8\jre\这样集成在jdk 中的jre 是给IDE 开发环境使用的。

具体参考探究过程参考:https://www.cnblogs.com/huangzp1104/p/11475143.html

实际干货篇:

1、数据类型:JAVA定义了8种基础数据类型和引用数据类型,其中需要注意的是char类型采用的是Unicode 编码方式,占两个字节(C/C++占两个,编码方式所致)

2、数组:Java支持锯齿数组。

PS: 锯齿数组的大小设置比较灵活,在锯齿数组中,每一行都可以有不同的大小.

拔高:Java的数组在JDK中没有明确的源码信息,探究和参考了一些文献分析,数组是Java中很特殊的对象,Java对数组对象化的操作的支持是指令级的,也就是说Java虚拟机有专门针对数组的指令。数组的Class类实例是Java虚拟机动态创建动态加载的,其结构与普通Java类的Class实例有一些不同。
详情分析探究过程参考:https://www.cnblogs.com/syxy/p/12347062.html

3、字符串:Java的字符串是不可变的,解释起来就是:只要你创建了一个字符串,就不能再对它进行改变(实际上的改变都是创建了新的字符串),原因可以参考String 对象是被final修饰的的源码,如下:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
{
    /** The value is used for character storage. */
    private final char value[];

    /** The offset is the first index of the storage that is used. */
    private final int offset;

    /** The count is the number of characters in the String. */
    private final int count;

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;
    ........
}

分析参考:https://blog.csdn.net/qq_38101834/article/details/87310282

4、循环:增强型for 循环(继承iterator或者iterable 接口的对象)

格式:for(数据类型变量名 :被遍历的集合(collection)或者数组或者迭代器对象) {

执行语句

}

对集合进行遍历,只能获取集合元素,不能对集合进行操作,类似迭代器的简写形式,但是迭代器可以对元素进行remove操作(ListIterator可以进行增删改查的操作)。

PS:集合实现了iterator接口,可以使用增强型for循环,那么数组呢?数组可以通过增强性for循环访问的原因现在还没有明确的资料解释,因为数组这个对象太特殊了、是由JVM动态创建操作的,没有源码分析参考,但是追根朔源,Java是由C/C++改编的,我从数组操作的一些报错信息中,也可以推知一二,如:数组越界异常:ArrayIndexOfBoundsException;开头报错的的是Array ,但是经过探究和查看Java Array部分的源码,分析这个Array不是Java中的Array对象,那么为什么要报ArrayIndexOfBoundsException,可能就是这个特殊的数组对象,就是C/C++中的Array,你可能会感到疑惑,Java中还能调用其他编程语言的代码?这确实是有的,任何一种编程语言底层语言都会用到C/C++,Java中本来就提供了一些调用其他语言的方法和接口,比如native方法就是Java调用非Java代码的接口,假如我的判断正确,那么也不难理解为什么Java的数组也可以使用增强型的for循环,因为C++中的数组Array 实现了Iterator方法,上述仅是个人分析,有误请指教。

5、类和对象:面向对象是Java的核心,继承、封装和多态;

继承:Java对象和对象、接口和接口之间只支持单继承,但是可以一个对象可以实现多个接口,以此来实现“多继承”

多态:实现多态的三个条件:继承;重写;父类引用指向子类对象。(面向对象语言降低程序之间耦合度的关键,很重要)

PS:实际创建对象的时候,需要注意修饰符问题,详情可参考:https://blog.csdn.net/u012723673/article/details/80613557
还有就是注意一个.Java文件中只能有一个主类(public 修饰的类),类中只能写属性和方法(内部类除外)

坑点:我曾经就直接在一个类中System.out.println ()语句,结果半天不知道什么原因,查了半天才知道,这种调用只能写在类的方法里面,类中只能写属性和方法,不能在类中直接调用其他方法,要在方法中调用

6、集合、容器、迭代器:
字符串容器:StringBuilder、StringBuffer(线程安全)

PS:效率StringBuilder>StringBuffer>String

集合容器:基本类型包括List、Set、Queue和Map

(已经有很详细的资料了,笔者就不多此一举)详情请参考:https://blog.csdn.net/starlh35/article/details/79262472

关于迭代器:可参考https://www.cnblogs.com/zyuze/p/7726582.html

基础篇幅有限、还有一些关于Java 文件的相关操作、网络编程(Socket )、多线程、反射机制等开发使用较多,资源很多,就不在基础篇一一赘述。

微语:有些事不是看到了希望才去坚持,而是因为坚持了才会看到希望。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一问30

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值