005.Java语言的基础知识

英语,是由26个英文字母组成的.不同的字符排雷组合成单词,不同的单词用各种语法知识,组成一句话让人理解.

编程就是在用编程语言去描述这个世界的事物,包括状态,属性,行为逻辑.

当事物本身很复杂,依赖很多,就需要很多很多的代码来描述.

最终构成一个完整的程序来完成开发者的需求.

常见的软件中,比如记录账户信息, 下单买东西,支付等.

一.Java代码的构成

:

类是一个模板,描述一类对象的行为和状态. 现实世界中就是各种事物的定义.比如定义人,那么应该包括名字,昵称,性别,年龄.

成员变量:

成员变量就是类中定义的现实世界的各种属性(名字,昵称,性别等).

方法:

方法就是类中的行为. 行为的最终目的都是增加,删除,修改,查询成员变量的值. 从而将结果传递给调用者.结果不一定有值,也可能只是方法行为的结束.

对象:

对象是类的一个实例,有属性状态和行为. 使用关键字new创建对象.现实中, 比如你是人这个定义的实例.你的某品牌的手机是手机这个定义的实例.里面手机的颜色,名字,尺寸就是状态. 打电话,发短信,上网就是行为.

主方法入口:

所有的Java程序的运行都需要起始点入口,都是从 public static void main(String[] args) {…} 方法开始的.

源文件:

当我们编写好以上的内容,就会产生一个个文件(.java后缀),源文件名必须和主类名相同.最终源文件被编译成字节码(.class后缀).就可以运行这些字节码.

二.写一个简单的类

代码请自行下载Github项目. 项目下载地址在下方小程序中获得.

005.Java语言的基础知识_第1张图片

如上图,

第1步: 先定义了package(包名), 右键java文件夹 --> New --> Pacakage.

包就是文件夹目录,这是为了方便分类管理越来越多的类. 包只从 src/main/java以后开始.属于相对路径的概念.

package github.brad.easy.a005; //包名以关键字 package 开始.位置放在最上面.

然后新建类 A01_Person. 这里的"A01_"前缀是为了便于文章便于区分,开发中不需要.

public class 类的名称 {
    //花括号里面添加成员变量和方法.
}

第2步: 添加成员变量和方法

成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化成员变量可以被类中方法、构造方法和特定类的语句块访问

成员变量的定义,需要根据项目需求,决定.不是一层不变的.不同的产品,业务,对于用户信息的要求也不同.有些需要实名制,有些需要有照片,有些需要有手机号等.

public class A01_Person {
    String myName;
    String nickName;
    String sex;
    int age;
}

**第3步:**类中的方法行为

printName()打印了一下类中的成员变量.

getAge() , 返回年龄.

public class A01_Person {
   String myName;
   String nickName;
   String sex;
   int age;

   public void printName(){
       System.out.println(myName);
       System.out.println(nickName);
   }

   public int getAge(){
       return age;
   }
}

第4步: main函数, 程序的入口.是固定的格式,名字是不可以修改的.

public static void main(String[] args) {}

即使一个最简单的类,也可以当作程序运行的.

第5步: 创建对象

使用关键字new ,调用构造方法A01_Person() ,当没有任何构造方法的时候,会有一个同名的默认构造方法.构造方法和方法还是有一些区别的,后面详细介绍它们的概念就会知道.

创建对象,自然是要有仪式的. new就是仪式的开端, 构造方法就是仪式的过程.

创建好对象后,我们需要复制给一个叫做A01_Person类的引用变量hello. 这个hello名字是随便起的.合理起名应该是person或者a01_Person. 这也说明起一个好名字的重要性,不然让人难以理解.

如果不起名字,你在下面就没办法赋值.

public static void main(String[] args) {
    A01_Person hello = new A01_Person(); //使用关键字new,创建对象.
    new A01_Person();//孤魂
    new A01_Person();//野鬼
}

第6步: 给对象赋值

public static void main(String[] args) {
    A01_Person hello = new A01_Person(); //使用关键字new,创建对象.
    new A01_Person();//孤魂
    new A01_Person();//野鬼
    hello.age = 100;  //给对象中的成员变量赋值.这些值可以从各种数据存储方式中查找获取,以下类似的都是赋值行为.开始.
    hello.sex = "男";
    hello.myName = "柳五苏世";
    hello.nickName = "Brad"; //给对象中的成员变量赋值.结束.
}

第7步: 调用方法-对象的行为

public static void main(String[] args) {
    A01_Person hello = new A01_Person(); //使用关键字new,创建对象.
    hello.printName();  //调用对象的方法,行为.
    int age = hello.getAge(); //调用对象的方法, 获取值.
    System.out.println("age:" + age); // print 打印出来.
}

第8步: 右键A01_Person类, run运行.

第9步: 编译好.class为后缀的字节码,并运行打印输出.

到这里你就看到一个很简单的Java程序从创建到运行,到结束.

三.一些知识

Java注释

注释就是对代码的解释。有时候也用来不执行某段代码。有如下两种注释方式。按情况使用。

快捷键: (下面的Ctrl是window系统的按键,Command是mac电脑的)

多行注释: (Ctrl/Command + Shift + /)

单行注释: (Ctrl/Command + /)

public class A08_Comment {
    /*这是一个多行注释.
     *打印Hello world的示例
     */
    public static void main(String[] args) {
        /*打印内容,多行注释.*/
        //打印内容,单行注释.
        System.out.println("Hello world, Mr/Ms.");
        //System.out.println("注释掉这一行代码,不执行这行代码。");

        /*System.out.println("注释掉多行代码,不执行这行代码1。");
          code1...
          code2...
          code3...
          System.out.println("注释掉多行代码,不执行这行代码2。"); 
         */
    }
}

空格与代码风格

空格和Tab键只是为了让代码看起来好看些,舒服些。

代码风格一般就跟人的形象,不要太邋遢。整洁干净才让人喜欢,看了舒服。

public class A09_CodeStyle {

    public static void main(String[] args) {System.out.println("看了舒服吗?");
        System.out.println("看了舒服吗?");String c=      "舒服吗?";
        String         a=    "舒服吗?";String b=      "舒服吗?";

        System.out.println("这样才舒服。");
        String d = "舒服,一行一句代码。";
        String e = "舒服,变量和关键字等,用空格隔开。";
        String f = "舒服,用缩进,像文章段落一样。";
        String g = "当不知道如何排版的时候: IDEA -> Code -> Reformat code (快捷键:Ctrl + Alt + L)";
        System.out.println("舒服完了。" + g);
    }
}

IDEA的基本用法

有关开发中IDEA的基本用法,在学完本篇后,参见idea分类的文章**《IDEA的基本用法》**。

3.1 Java标识符

代码中的各种组成部分都需要名字. 比如类名,变量名,方法名.接口名,这些都称作标识符.

标识符的命名规则需要注意:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始.(一般不用美元符)

  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合(一般不用美元符)

  • 关键字不能用作标识符

  • 标识符是大小写敏感的

合法的标识符:
name,_name,$name,name1_,Name
非法的标识符:
123name, *name

类名:一般首字母大写.如果是多个单词组成,每个单词首字母大写,即驼峰法.例如: UserInformationClass

方法名: 所有的方法名都应该以小写字母开头。剩余部分遵循驼峰法。例如: getUserInformationMethod

成员变量和局部变量一般和方法名一样命名.

静态变量: 也叫类变量,一般大写,如果多个字母,使用下划线’_'分开.

3.2 Java变量

之前我们提到过成员变量.实际上一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

    类变量:类变量,也叫静态变量,也声明在类中,方法体之外,但必须声明为 static 类型。

    这几种变量的用途不太一样,从名字和定义也可以看出来.

    几种变量的示例:

005.Java语言的基础知识_第2张图片

代码如下. 运行代码之后得到打印内容.

005.Java语言的基础知识_第3张图片

按照上图步骤,解释:

第1步: 可以看出来类变量是不需要创建对象就可以被访问的.

第2,3,4步: 创建对象时,先执行代码块,打印age. 然后再执行构造方法.打印name,age. 此时age在代码块中被赋值为1.

第5步:局部变量,也可以理解成临时变量.将对象中的age取出赋值给局部变量,然后再修改局部变量的值后,对象的值没有发生变化.

package github.brad.easy.a005;

public class A02_Person {

    static int HEAD_NUMBER = 1; //头的个数
    static int EYE_NUMBER = 2; //眼睛的个数

    String name; //成员变量
    int age; //成员变量

    public A02_Person(){ //构造方法,没有使用默认的空构造方法.
        System.out.println("构造方法开始.");
        System.out.println("name:"+name);
        System.out.println("age:"+age);  //成员变量可以被类中的构造方法访问.
        System.out.println("构造方法结束.");
    }

    {
        System.out.println("代码块开始.");
        System.out.println("age:"+age);  //成员变量可以被类的语句块访问.
        age = 1;
        System.out.println("代码块结束.");
    }

    public int getAge(){
        return age; //成员变量可以被类中的方法访问.
    }

    public static void main(String[] args) {
        System.out.println("head number:" + A02_Person.HEAD_NUMBER); //此处请注意获取该静态变量的方式. 没有使用person.HEAD_NUMBER
        System.out.println("eye number:" + A02_Person.EYE_NUMBER);

        A02_Person person = new A02_Person(); //注意:代码块是在构造函数之前调用的.

        person.age = 100;
        int localVariable = person.getAge(); //局部变量,main也是方法.所有person,和localVariable 都是局部变量.
        System.out.println("now age:"+localVariable);
        localVariable = 10;
        System.out.println("person age:" + person.age);
    }
}

3.3 方法

方法是语句的集合,多条语句放在一起完成一个功能.功能越复杂,方法语句越多.

方法也有对象方法和类方法.和变量相似,有成员变量和类变量.

方法主要是为了重用,就是写好特定功能,被其它地方可以重复调用,调用者不需要知道该功能的具体业务逻辑.

方法的定义:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

  • **修饰符:**修饰符,这是可选的, 默认是default。定义了该方法的访问类型. 修饰符下面会介绍.
  • 返回值类型 :方法可能会返回值。返回值类型 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,返回值类型 是关键字void
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法的唯一性
  • **参数:**参数类型是定义传进来的参数是什么。 参数名可以是对传进来的参数新的名字。参数的个数从0到多个都可以。
  • **方法体:**方法体包含具体的语句,定义该方法的功能行为。

下面是一个代码例子,我们以银行中的用户信息为例,用户有账户余额,资产值,信用卡账单等数据:

005.Java语言的基础知识_第4张图片

第1步: 从数据库等地方获取到用户的数据信息,这里我们忽略获取过程,实例化用户,并赋值.有没有发现这一步用了很多行,比较繁琐.下面我们会介绍构造方法,来简化一下.

第2步: 如果直接用几个参数计算,也是可以的. 也可以调用方法去计算. 好处就是调用者不需要知道具体的计算净资产的逻辑.直接调用方法返回数据就可以.

第3步: 假设每个用户的信用卡总额度, 然后通过计算得到用户信用卡剩余额度.

再来一个相对抽象的方法示例:

005.Java语言的基础知识_第5张图片

第1步:创建对象的时候,使用了自定义的构造方法,下面会讲.

第2,3步: 注意它们的方法名是一样的,因为参数不同,从而使得它们不冲突,是唯一的.

第4步: 被注释掉的部分,和上面一样比较,返回值是不同的,但是同样会报错.

3.4 构造方法与初始化

005.Java语言的基础知识_第6张图片

运行代码查看输出打印结果如下.

第1步: 使用无参构造方法,创建对象,直接打印可以看到,String类型的成员变量,初始化值都为null. int类型变量初始化值都为0.

这里说明一下,如果没有任何构造方法, 编译器会产生默认的无参构造方法. 如果有构造方法,将不再做这个事情.

也就是说如果你注释掉(Ctrl/Command + Shift + /)无参构造方法,那么第一步肯定会报错的.

第2步: 赋值后,打印.

第3步: 使用自定义的有参构造方法,创建对象,可以看到打印结果.传参进去的值都正确赋值了.参数个数和方法一样,按需要设置.

这里出现的this,意思是对象自己的意思.区别于传进来的参数名.你会发现参数名是和成员变量一样的.

为啥这样呢? 因为写构造方法时,就是为了给成员变量赋值,如果每个参数都从新命名,会很乱,你试一下就知道了.

当没有this的时候,获取的是最近的局部变量值. 有this表明是对象的成员变量值.

005.Java语言的基础知识_第7张图片

构造方法和方法是不一样的概念. 构造方法就是工厂制作产品汽车的过程行为. 而方法呢,是汽车的行为,开车,转弯,油门等.

在写法上有细微区别,要注意区分.

3.5访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

我们可以通过以下表来说明访问权限:

修饰符 当前类 同一包内 子孙类(同一包) 子孙类(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y Y/N (见下面解释) N
default Y Y Y N N
private Y N N N N

protected 需要从以下两个点来分析说明:

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
  • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

分别运行三个类的代码: A05_Person_Modifier_1_Public, A05_Person_Modifier_2_Default, A05_Person_Modifier_3_Test

运行可知基本用法.主要注意的就是私有变量不是谁都可以访问的. 不同包的可以自己试试.权限如上面的表格所写.

访问控制符的作用

为了防止别人调用你过度暴露提供的方法,造成不必要的数据问题.不该更改的数据,不提供方法和变量给外部直接访问.

一般成员变量都会设置为私有的.通过get/set方法提供给外部调用.

快捷生成这类代码的方式: 在类定义体中,右键鼠标 -> Generate…

005.Java语言的基础知识_第8张图片

可以选择生成Getter/Setter, Constructor(构造方法),还有一些其它的代码toString,equals/hashCode.

005.Java语言的基础知识_第9张图片

另外有些数据调用者并不关心,你暴露出来,会对调用者造成混淆,导致不知道使用哪个方法好.

3.6 Static 修饰符

static 修饰符,可以用来修饰类方法和类变量,也可以修饰类。

  • 静态变量:

    static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

  • 静态方法:

    static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

对类变量和方法的访问可以直接使用 classname.variablenameclassname.methodname 的方式访问。

static修饰符在访问控制修饰符的代码中,已有演示.运行代码即可.

3.7 Java关键字

下面这些保留字不能用于常量、变量等任何标识符的名称。有个印象就好.以后会学到.

类别 关键字 说明
访问控制 private 私有的
protected 受保护的
public 公共的
default 默认
类、方法和变量修饰符 abstract 表明类或者成员方法具有抽象属性
class
extends 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
implements 表明一个类实现了给定的接口
interface 接口
native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new 用来创建新实例对象
static 表明具有静态属性
strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
synchronized 表明一段代码需要同步执行
transient 声明不用序列化的成员域
volatile 表明两个或者多个变量必须同步地发生变化
程序控制语句 break 提前跳出一个块
case 用在switch语句之中,表示其中的一个分支
continue 回到一个块的开始处
default 默认,例如,用在switch语句中,表明一个默认的分支
do 用在do-while循环结构中
for 一种循环结构的引导词
if 条件语句的引导词
else 用在条件语句中,表明当条件不成立时的分支
instanceof 用来测试一个对象是否是指定类型的实例对象
return 从成员方法中返回数据
switch 分支语句结构的引导词
while 用在循环结构中
错误处理 assert 断言表达式是否为真
catch 用在异常处理中,用来捕捉异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明在当前定义的成员方法中所有需要抛出的异常
try 尝试一个可能抛出异常的程序块
包相关 import 表明要访问指定的类或包
package
基本数据类型 boolean 布尔型
byte 字节型
char 字符型
double 双精度浮点
float 单精度浮点
int 整型
long 长整型
short 短整型
变量引用 super 表明当前对象的父类型的引用或者父类型的构造方法
this 本类
void 无返回值
保留关键字 goto 保留关键字,没有具体含义
const 保留关键字,没有具体含义
null

四.综合运用

运行BaseKnowledgeApplication类.

端口被占用

如果遇到如下错误:

Web server failed to start. Port 8080 was already in use.

005.Java语言的基础知识_第10张图片

标记1和3,表明在运行窗口中的程序.(Base Knowledge Application和 What Java Can Do Application)

标记2表明1的程序端口被占用了.

点击标记3,会发现标记4的位置为红色按钮, 点击关闭这个程序,就会释放端口.偶尔全部都关闭还不行,就重启开发工具,甚至重启电脑.

另外4标记上面的绿色按钮,是启动对应代码程序的快捷键.

访问后端获得数据

http://localhost:8080/a005/user   //此处访问用户信息,不再是之前接口中手工写的字符串,而是直接返回了对象.
http://localhost:8080/a005/netAsset  //前端调用后端,获取用户的净资产.
http://localhost:8080/a005/leftCredit  //调用后端,获取用户剩余信用额度.

几个接口,模拟真实环境,将本篇学的内容,开发常用部分全部应用了一下.


​ 扫码关注小程序,进群讨论提问,获取源代码.获得最新更新,关注下方公众号.

005.Java语言的基础知识_第11张图片

本文版权归作者所有,欢迎转载,但未经作者同意, 必须保留小程序和二维码,且在文章首行位置标注如下转载说明:

文章转载自 “原文链接URL”, 作者: 柳五苏世_Brad

你可能感兴趣的:(Java零基础入门)