在学习过程中,基础部分是跟着菜鸟教程进行复习的,所以,读者也可以根据菜鸟教程内容进行学习。这里挂一个菜鸟教程的链接:Java教程——菜鸟教程
首先我们先用hello world进行热身
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
在这里面我们需要注意的点就是:虽然String[] args和String args[]是相同的执行结果,但是按照习惯来说,我们应该使用String[] args,这样的好处是可以避免歧义和误读。
对于Java编译器来说,我们直接运行就可以了;如果需要通过命令行运行java文件,我们可以在指定文件夹下在终端输入命令:javac xxx.java,再运行java xxx,即可以正常运行文件。
这里介绍这两个命令:
- javac:用法为javac xxx.java。其功能是将java源文件编译为class字节码文件,这时会获得一个xxx.class的文件
- java:用法为java xxx。其功能是运行编译的字节码文件。
注:但是我在这里运行的时候,虽然产生了.class文件,但是在进行java xxx的时候,却发生报错:显示为java.lang.NoClassDefFoundError: onceagaintolearn/day_01 (wrong name: day_01)。这个错误在其他博客中由解决办法,在这里挂个链接:解决NoclassDefFoundError报错
由于暂时小编使用的编译器运行,暂时不对该问题进行解决,在后面如果遇到同类问题,会专门出一篇文章对该问题进行解决。
下面开始正式的重新捡起Java内容:
基础语法
对于Java方面,主要的概念有:
- 对象:就是类的实例化,存在状态和行为。
- 类:是一类对象的模板,能够描述一种同类型的对象的行为和状态。
- 方法:方法就是类中对对象行为的描述,通过函数定义各种行为,如逻辑运算、数据修改和很多行为都是在方法中完成的。
- 实例变量:实例变量就是对对象的特殊化,比如对于dog,就会存在不同种类的dog,比如金毛、拉布拉多、马犬等就是不同种类的dog。那么每一种种类的dog就是一个独特的对象,这就是实例化的变量。
基本语句:
- Java语法是大小写敏感的,(其实,windows系统也是大小写敏感的,对于系统的介绍会在web安全中进行介绍)
- 类名:对于类的命名规则,我们一般将类的每个单词的首字母进行大写。
- 方法名:对于方法名,我们除了第一个单词的首字母进行小写之外,其他单词的首字母用大写。
- 源文件名:源文件名和类名必须一致。在保存文件的时候,使用类名当做文件名进行保存,文件名的后缀为.java。(注:如果文件名和类名不相同会导致编译报错)
- 主方法入口:所有Java程序的入口都是public static void main(String[] args)方法开始的。
Java标识符:
Java中的所有组成部分都需要名字。类名、方法名、变量名都被称为标识符。
而标识符的命名存在几点注意的:
- 标识符的开始都是大小写字母,美元符$或者下划线_开始。
- 除了首字符,其他部分可以是字母、美元符、下划线、数字组成。
- 关键字不能作为标识符(如static)
- 标识符是大小写敏感的
Java修饰符:
存在两类修饰符:
- 访问控制修饰符:default、public、protected、private。用于对类,方法,变量,构造方法的访问控制。
- default:在同一个包内可见,不使用任何的修饰符,使用范围:类、接口、变量、方法。
- public:在所有类内可见,使用范围:类,变量,方法,接口。
- protected:在同一个包内的类和所有子类可见,使用范围:变量、方法。(不可以用来修饰类(外部类))。
- private:在同一个类中可见。使用范围:变量,方法(不能用来修饰类(外部类))。
- 非访问控制修饰符:final、abstract、static、synchronize
- final:修饰变量,类,方法。修饰的类不能继承、修饰的方法不能重写、修饰的变量为常量。
- abstract:用来创建抽象类和抽象方法。声明抽象类的目的是为了对类进行扩充。一个类不能同时被abstract和final进行修饰。如果包含抽象类方法,那么该类就一定声明为抽象类,不然就会编译出错。在抽象类中可以包含抽象方法和非抽象方法。
- 对于抽象方法,需要子类进行具体的实现
- 抽象方法不能被声明为final和static
- 继承抽象类的子类必须实现父类中的所有抽象方法,如果子类为抽象类则不需要。
- 如果抽象类包含1个及以上的抽象方法,那么该类必须声明为抽象类;但是抽象类可以不包含抽象方法。
- 抽象类的声明用分号结尾。
- static:用来修饰类方法和类变量。
- 静态变量:用来声明独立于对象的静态变量,静态变量也被称为类变量,局部变量不能被声明为static变量。
- 静态方法:static关键字用于声明独立于对象的静态方法,静态方法不能使用类的静态变量。静态方法从参数列表中得到数据,之后对其进行计算数据。
- synchronize:以及(volatile修饰符),用来修饰线程的编程。
- synchronize修饰符:关键字声明的方法同一时间只能被一个线程访问。synchronize修饰符可以应用于四个访问控制符。
- transient修饰符:序列化对象包含transient修饰的实例变量时,JVM虚拟机跳过特定的变量。
- volatile修饰符:volatile修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且当成员变量发生变化时,会强制线程将变化值回写到共享内存中,在这样的任何情况下,两个不同的线程总是能看到某个成员变量的同一个值。
- 访问控制和继承:
- 父类中的public方法在子类中也必须声明为public
- 父类中的protected方法在子类中可以声明为protected,也可以声明为public,但是不能声明为private
- 父类中声明为private的方法,不能被子类继承。
Java变量:
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
Java枚举:
枚举限制变量只能是预先设置好的值,通过枚举可以减少代码中的bug。
Java注释:
和C语言的注释一样,//表示单行注释,/**/表示多行注释
继承:
在Java中,一个类可以由其他类进行派生,如果你要创建的类是已有的类中存在的属性或者方法,那么我们可以通过继承来使得减少重复性的操作,直接用我们新建的类来继承已有的类。
通过继承,我们可以复用已有的方法和属性,而不用重写代码。被继承的类被称为超类(super class),派生类称为子类(sub class)。
接口:
在Java中,接口可以理解为对象间相互通信的协议。接口定义派生时需要使用的方法,但是方法的具体实现还是需要子类进行。
补充一:
Java源程序和编译型源程序相比其区别在于:
编译型源程序通过编译连接生成可执行EXE程序,之后直接执行在操作系统上。
而Java源程序经过编译之后生成字节码程序,而字节码程序必须通过解释器进行解释后才能运行在操作系统上。
补充二:
访问控制符的比较:
参考文献及图片来源:菜鸟教程
如果文中存在谬误,请读者指出,小编会及时进行学习和修改,希望可以一起学习Java知识。