Java基础语法

Free Talk

最近在JavaGuide博客里面兜兜转转了几天,一边等华为的实训消息,一边随便看点Java后端开发的知识。但是这一周总感觉看了就忘,而且光看也很容易走神发呆,要不然就是去打王者啥的。决定还要按照直接写的Java后端学习路线一点点走下去,一篇篇写博客敦促自己,上个月的时候写了一些JVM相关的文章,现在把之前鸽的Java语言基础先补上。

这边Java基础语言主要参照菜鸟教程JavaGuide完成的,计划在今明两天完成Java语言基础系列博客。

基础知识

四要素

任何一个Java程序都可以认为是一系列对象的集合,而对象之间通过彼此调用方法来协调工作。

  • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • 类:类是一个模板,它描述一类对象的行为和状态
  • 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
  • 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

基础语法

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

    我自己方法名这块之前好像总是大写,记下了

  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的 Java 程序由 public static void main(String[] args) *方法开始执行。

    在Java小程序中,applet小程序没有main()方法,是调用init()或者run()方法来启动。

    Java标识符

  • 类名、变量名以及方法名都被称为标识符。
  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
  • 关键字不能用作标识符
  • 标识符是大小写敏感的
  • 合法标识符举例:age、$salary、_value、__1_value
  • 非法标识符举例:123abc、-salary

    进阶知识

    Java修饰符

    Java可以使用修饰符来修饰类中方法和属性。
  • 访问控制修饰符 :default, public , protected, private
    UKgGhF.png
  • 非访问控制修饰符 : final, abstract, static, synchronized

Final修饰符

Final修饰符可以用来修饰类、方法和变量。

  1. 类:final修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法;
  2. 方法:final修饰的方法不能被重写;
  3. 变量:final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象。

使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为final。

Abstract修饰符

  1. 抽象类:
  • 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
  • 一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
  • 抽象类可以包含抽象方法和非抽象方法。
  1. 抽象方法:
  • 抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。抽象方法不能被声明成final和strict。
  • 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
  • 如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。

Static修饰符

  1. 修饰成员变量和成员方法:
    被 static 修饰的成员方法属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。
    被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区。
    调用格式:类名.静态变量名 类名.静态方法名()
  2. 静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次.
  3. 静态内部类(static修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法。
  4. 静态导包(用来导入类中的静态资源,1.5之后的新特性): 格式为:import static这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。

Synchronized修饰符

Synchronized关键字声明的方法同一时间只能被一个线程访问。Synchronized修饰符可以应用于四个访问修饰符。

Java变量

  • 类变量:独立于方法之外的变量,用 static 修饰。
  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。
  • 局部变量:类的方法中的变量。
1
2
3
4
5
6
7
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}