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");
}
}
基本数据类型
- 整数 byte,short,int,long
- 浮点:float,double
- 字符类型 char
- 布尔类型 boolean
对于较长的数据类型,可以使用var
关键字,如var sb = new StringBuilder()
会自动解析为StringBuilder sb = new StringBuilder()
。
String
类型数据可以通过:
- 直接构建:
String stra = "hello"
- 通过构造函数构建:
String strb = new String("hello")
String
进行比较时,可通过stra.equals(strb)
来比较,而stra==strb
仅比较两者的内存地址。
为了避免出现 NoPointerException
问题,在字符串比较时,可以采用"hello".equals(stra)
,而不是strs.equals("hello")
。
String
直接赋值时,只会开辟一块内存空间,并且会自动保存在变量池中以供下次重复使用,而构造函数时,不会自动入池,需要调用intern()
方法手动入池。
数组定义
int[] s = new int[5]; s[0]=1;s[1]=2;...
int[] s = new int[]{1,2,3,4,5};
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;
}
其中字段的修饰方法有public
和private
,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
限定的字段和方法仅能够在继承树内部访问,其介于public
和private
中间
子类继承父类时可以通过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。
网友评论