JAVA基础

2019-06-27  本文已影响0人  csuhan

JDK安装

安装JDK一般需要在oracle官网下载JDK,然后设置JAVA_HOME,设置path,此处推荐安装https://adoptopenjdk.net/的OpenJDK,其提供Windows、Linux、Mac等平台的MSI安装包,直接下载安装即可完成JDK配置。

IDE使用

作为一个JAVA新手,根据网上的帖子,电脑内存大(8GB+)推荐使用Idea,内存小推荐使用Eclipse。而像我目前仅练习基础JAVA,因此使用的VSCode+Java Extension Pack的方式,其可以通过这里Download Visual Studio Code Java Pack Installer
快速安装所需的VSCode、JDK及扩展包。

JAVA程序基础

JAVA程序基本结构

JAVA程序是完全的面向对象编程,因此其基本单位也是类。

//单行注释
/*
多行
注释
*/
public class Hello{
  public static void main(String[] args){
    System.out.println("Hello world");
  }
}

基本数据类型

  1. 直接构建:String stra = "hello"
  2. 通过构造函数构建:String strb = new String("hello")

String进行比较时,可通过stra.equals(strb)来比较,而stra==strb仅比较两者的内存地址。
为了避免出现 NoPointerException 问题,在字符串比较时,可以采用"hello".equals(stra),而不是strs.equals("hello")

String直接赋值时,只会开辟一块内存空间,并且会自动保存在变量池中以供下次重复使用,而构造函数时,不会自动入池,需要调用intern()方法手动入池。

数组定义

  1.  int[] s = new int[5];
     s[0]=1;s[1]=2;...
    
  2.  int[] s = new int[]{1,2,3,4,5};
    
  3.  int[] s = {1,2,3,4,5};
    

对于字符串数组,由于其是引用类型,因而尤其特殊的地方。

String[] names={"XYZ","abc","mnp"};
String s = names[1];
names[1]="cat";
System.out.println(s);
//输出abc

这是因为String作为引用类型,指向的是其内存地址,而不会在原地址改变其内容。

流程控制

for循环有两种,一种是常规的for(int i=0;i<3;i++),另一种是for each形式的for(int i:names)
数组排序:

import java.util.Arrays
Arrays.sort(arr)

面向对象编程

一个class可以包含多个field

class Person{
  public String name;
  public int age;
}

其中字段的修饰方法有publicprivate,public代表字段是公开可访问的,private代表其是私有的,仅通过类别内部访问。
类内部的方法、字段都可以通过this来访问,如this.name
构造方法与类名相同,可以设置不同的初始化参数,可以有多个构造方法。
方法名相同,参数不同即为重载。

继承

class Person {
    private String name;
    private int age;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
}

class Student extends Person {
    // 不要重复name和age字段/方法,
    // 只需要定义新增score字段/方法:
    private int score;

    public int getScore() { … }
    public void setScore(int score) { … }
}

java仅支持单继承,即每个类只有一个父类,但可以通过接口(interface)实现多继承。
protected限定的字段和方法仅能够在继承树内部访问,其介于publicprivate中间
子类继承父类时可以通过super()调用父类方法,如super()表示父类构造方法,super.fieldname访问父类字段。

向上转型

Person p = new Student() 即 将Student转为Person类型
而向下转型则不一定成功,原因在于其父类不一定有子类的方法。
如果不希望一个类被继承,可以使用final字段,从而限制其继承。

抽象类

如果某个类仅用于定义方法,可以使用抽象类

abstract class Person {
    public abstract void run();
}

抽象类不能够被实例化。

接口

接口interface:如果一个抽象类没有字段,所有方法全部都是抽象方法,则可以定义为接口。一个类可以实现多个接口。

class Student implements Person, Hello { // 实现了两个interface
    ...
}

接口之间可以是继承(extends)关系。

静态字段和静态方法

实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。
包必须与目录层次相同。
classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class。

上一篇 下一篇

猜你喜欢

热点阅读