同福

Java基础语法V1.1【20210713】

介绍

介绍

Java语言福哥已经给大家介绍过了,现在童鞋们应该已经会安装java的开发环境了,接下来我们需要针对java语言进行一个系统的学习。

首先学习一门编程语言最先要学习的是语言的语法,学习编程语言的语法包括常量与变量、输入与输出、条件语句(if)、循环语句(for,while)、交换语句(switch,case)、对象(class)。Java语言是纯粹的面向对象的编程语言,所以我们不能定义一个独立存在的函数,只能通过定对象来实现。Java语言的语法是非常优美的,编写Java程序是一种享受~~

基本语法

  • Java是纯粹的面向对象的编程语言,所有的程序都必须以对象的形式编写。一个Java程序文件里必须有一个公开的对象定义,且对象的名称必须和程序文件名称一样

  • Java是强类型语言,在声明局部变量、对象属性、对象方法、方法参数、方法返回值都必须指定具体的类型。

  • 程序段落使用花括号“{}”框起来,程序表达式使用小括号“()”框起来,数组使用“[]”框起来,基这点本和C/C++一致

  • 行注释使用“//”,如果要为代码写注释信息或者取消一行代码的作用,需要使用“//”符号

  • 块注释使用“/* ... */”,如果要为代码写注释信息或者取消一段代码的作用,需要使用“/* ... */”符号

常量与变量

变量定义

java属于强类型的语言,所以java的变量必须声明类型

String whoAmI = "同福";
Integer howOldAmI = 35;

类型转换

虽然java是强类型,但是有个泛型类型Object可以做为任意类型的数据定义使用,我们在无法预期变量类型的时候可以定义其为Object类型

Object sVar = "福哥";
Object iVar = 35;
String sFuge = (String) sVar;
Integer iAge = (Integer) iVar;

null

在java里一个变量的值为null就表示该变量没有设置有效的值,我们可以通过判断变量的值是否为null得知变量的值是否是有效的

值为null的变量不能进行任何运算、比较,也不能调用属性、方法

空类型

在java里如果要定义一个没有返回值的方法的时候,可以使用“空类型”做为方法的返回类型。所谓“空类型”就是“void”类型

输入与输出

输入

java输入语句使用System.in.read命令

String yourName = "", sHowOldAreYou = "";
Integer howOldAreYou = 0;
byte[] buff = new byte[100];
int rLen = 0;

try {
    System.out.println("你叫什么?");
    rLen = System.in.read(buff);
    yourName = new String(buff, 0, rLen);
    System.out.println("你多大了?");
    rLen = System.in.read(buff);
    sHowOldAreYou = new String(buff, 0, rLen);
    howOldAreYou = Integer.parseInt(sHowOldAreYou);
}
catch (IOException e){
    e.printStackTrace();
}

System.out.println ("你是" + yourName + ",你今年" + howOldAreYou + "岁");

输出

java输出语句使用System.out.println命令

String whoAmI = "同福";
Integer howOldAmI = 35;

System.out.println ("我叫" + whoAmI + ",我今年" + howOldAmI + "岁");

条件语句(if)

java的条件语句使用的是标准的if、else语法,这个和C++基本是一样的

String whoAmI = "同福";
Integer howOldAmI = 35;
if(whoAmI != null && !whoAmI.equals("")) {
    System.out.println(whoAmI);
    if(howOldAmI != null && howOldAmI == 35) {
        System.out.println(howOldAmI);
    }

    if(howOldAmI == 12) {
        System.out.println("好年轻啊!");
    }
    else if(howOldAmI == 25) {
        System.out.println("好帅啊!");
    }
    else {
        System.out.println("你到底多大啊?");
    }
}

循环语句(for,while)

按次循环

java的按次循环也是标准的for语法,这个和C++基本是一样的

Integer howOldAmI = 0;
for(int i=0;i<35;i++) {
    howOldAmI ++;
}
System.out.println(howOldAmI);

条件循环

java的条件循环也是标准的while语法,这个和C++基本是一样的

Integer howOldAmI = 0;
Integer i = 0;
while(i < 35) {
    howOldAmI ++;
    i ++;
}
System.out.println(howOldAmI);

交换语句(switch,case)

java的条件循环也是标准的switch、case语法,这个和C++基本是一样的

String whoAmI = "同福";
Integer howOldAmI = 35;
String learningLanguage = "";
switch (howOldAmI){
    case 20:
        learningLanguage = "PHP";
        break;
    case 25:
        learningLanguage = "ASP";
        break;
    case 30:
        learningLanguage = "Java";
        break;
    default:
        learningLanguage = "C/C++";
        break;
}
System.out.println ("我叫" + whoAmI + ",我在" + howOldAmI + "岁的时候学会了" + learningLanguage + "语言");

对象(class)

java的对象定义语法很漂亮,它在C++的语法基础之上进行了一些简化。java这种语法后来被PHP、C#等等语言直接照搬过去了,足以证明它的优秀~~

基本语法

咱们看一个例子先

类定义

class fuge {
    private String name = "同福";
    private Integer age = 35;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void showInfo(Integer num) {
        System.out.println("[" + num + "] 我叫" + this.name + ",我今年" + this.age + "岁");
    }

    public void callShowInfo() {
        this.showInfo(6);
    }
}

类调用

fuge myFuge = new fuge();
fuge myFuge2 = new fuge();
myFuge.showInfo(1);
myFuge2.setName("福哥");
myFuge2.setAge(36);
myFuge.showInfo(2);
myFuge2.showInfo(3);
myFuge.callShowInfo();

dafa6b357b0851bf.jpg

优点

大家可以和福哥一块儿看看java的对象定义优点

  • 对象声明使用class,这点和C++是一样的

  • 每个属性声明需要单独指定修饰符,虽然比C++的分组修饰麻烦些,但是直观感更好了

  • 每个方法声明需要单独指定修饰符,虽然比C++的分组修饰麻烦些,但是直观感更好了

  • 所有方法定义都在class的花括号里面,这样每个方法定义时候不需要写所属class名称了

  • 方法内调用属性使用this指针,也可以直接写属性名称,这点和C++是一样的

  • 方法内调用其他方法使用this指针,也可以直接写方法名称,这点和C++是一样的

缺点

当然了,有一些C++的优点设计在java里面给去掉了,这个福哥也要说一下

  • 方法参数不能设置默认值,这个真的有点不方便,虽然可以使用多态解决,毕竟有些情况下还是默认值更方便

  • 继承父类(超类)时候,构造器第一行必须调用父类的构造器,这个福哥非常的鄙视!太不方便了!

方法(method)

java的方法定义直接写方法名称,这一点要比PHP、JavaScript要舒服多了。

无返回值

无返回值的方法定义需要设置返回值为“void”类型

class fuge {
    void showInfo() {
        System.out.println("同福");
        System.out.println(35);
    }
}

fuge myFuge = new fuge();
myFuge.showInfo();

有返回值

有返回值的方法定义需要指定返回值类型,返回值使用return关键字返回出来

class fuge {
    String getName() {

        return "同福";
    }

    Integer getAge() {

        return 35;
    }
}

fuge myFuge = new fuge();
System.out.println("我叫" + myFuge.getName() + ",我今年" + myFuge.getAge() + "岁");

有参数

有参数的方法定义,每个参数必须指定类型

class fuge {
    void showInfo(String name, Integer age) {
        System.out.println("我叫" + name + ",我今年" + age + "岁");
    }
}

fuge myFuge = new fuge();
myFuge.showInfo("福哥", 35);

多态

java的方法参数不支持参数默认值,如果要假设某些参数没有传入的情况,可以使用多态解决

class fuge {
    void showInfo(String name, Integer age) {
        System.out.println("我叫" + name + ",我今年" + age + "岁");
    }
    void showInfo(String name) {
        showInfo(name, 35);
    }
    void showInfo() {
        showInfo("福哥");
    }
}

fuge myFuge = new fuge();
myFuge.showInfo();

使用相同方法名称不同参数个数(或者不同参数类型)定义方法的做法称之为多态,我们可以在这些同名不同参的方法里面实现相同的功能,从而达到类似默认值的效果

可以看出来多态实现参数默认值效果是非常糟糕的设计,不仅代码量更多,同名方法个数也会随之默认值参数的数量成几何倍的增加,真是一大败笔啊~~

捕获异常语句(try)

很多时候我们所期望的情况和实际的情况是有差距的,这个时候会出现意想不到的情况,这种情况我们称之为异常情况(Exception),一般情况下,遇到这种情况程序会终止执行,这不是我们所希望的

为了解决这个问题,我们可以使用try语句去尝试执行我们的程序代码,如果出现了异常我们可以主动设计程序的处理方案,避免程序终止执行

try {
    System.out.println(fuge + ",是你吗?");
}
catch (Exception e){
    System.out.println(e.getMessage());
}
finally {
    System.out.println("哦,我知道了");
}

解释一下

  • try:这部分代码是主逻辑,java会尝试运行这段代码

  • catch:如果主逻辑执行出现异常情况会将异常信息捕获起来放入变量e,并执行用户的处理方案

  • finally(可选):无论主逻辑执行是否出现异常情况,这段代码都会被执行,这段是可选的

补充说明

虽然我们编写程序的时候很难避免会出现异常情况,但是大部分低级错误在java里面是不会发生的,因为这些可能的异常错误会在编译阶段就被告知了!所以,虽然编写java程序代码看起来很复杂、很臃肿、很费事,但是依靠严谨的语法和强大的编译器检测机制使得java程序的稳定性还是要超过那些弱类型语言的

抛出异常语句(throw)

一些情况下,我们的程序无法继续处理,这时候就需要告知上一层的程序代码程序运行遇到了问题。这种情况下,我们可以使用throw语句主动抛出一个异常状态出来,交给上一层的程序代码去处理

上一层程序代码也就是调用当前函数的程序代码,它接收到我们抛出来的异常可以通过try进行捕获,也可以不管这个异常,那么java虚拟机在运行程序的时候就会把这个异常显示出来了

class fuge {
    void showInfo(String name, Integer age) 
            throws Exception {
        if(age == 0) {

            throw new Exception ("没有人的岁数是 0 岁好吗?");
        }

        System.out.println("我叫" + name + ",我今年" + age + "岁");
    }
}

try {
    fuge myFuge = new fuge();
    myFuge.showInfo("福哥", 35);
}
catch (Exception e){
    e.printStackTrace();
}

引用自定义包

我们编程java程序时候,在将公共处理封装到对象里面,这样业务逻辑代码会看起来非常清爽。如果一些对象是属于公共的,多处都需要使用这些对象,那么应该怎么办呢?

我们可以将对象放到一个同名的java文件里,在需要调用这个对象的class文件里面引用它们。引用其他对象通过import命令完成,引用的时候需要给出完整的库包路径

结构

controller/DemoController.java
model/Demo.java

DemoController.java

import com.example.demo.model.Demo;

总结

java的语法很漂亮,与常规的C++语言的语法格式非常相似,这种语法格式代表了一个时达的风格。基本上新出一个强类型的语言,其语法风格一定是和java相似的,这就是java语言的魅力。

福哥尝试着用最容易理解的方式给童鞋们讲解各种编程语言的语法和开发技巧,希望童鞋们可以认真学习。如果遇到了问题,可以将真实的感受反馈给福哥,福哥会想办法以更加好理解的方式讲解给大家~~