文章目录:
参考:黑马程序员(Bilibili) and 菜鸟教程
基础知识
- 所有的Java程序都从入口
public static void main(String[] args)进入,字段分别为访问修饰符、关键子、返回类型、方法名、(输入变量)。 - 文件名要与
public class的类名相同。 命令行运行方法:
javac HelloWorld.java //编译为class文件 java HelloWorld //运行class文件- 注释:单行注释
//,多行注释/*注释*/ 类概要
变量
类中可以包含以下三种变量类型:
- 局部变量:方法、构造方法、各种语句块(循环/判断等)中的变量,只存在于各自方法/块中;
- 成员变量:直接定义在类中的变量,这种变量会在创建对象时实例化,可以被访问(取决于自身访问修饰符);
类变量:也声明在类中,方法体之外,但必须为static类型。
构造方法
构造方法的名称必须与类同名,一个类可以有多个构造方法(重载规则),若没有构造方法则Java编译器会有默认的无参数构造方法。
Example:public class People{ String name; int age; public People(){ } public People(String name){ this.name = name; //若 } public void gun(){ // do nothing } }对象
创建对象会有以下的步骤:声明对象名称和类型,使用关键词new来实例化一个对象,使用new时会调用构造函数初始化对象。
Like:People ALH = new People("ikun")
访问变量和方法,类似于C结构体,使用对象名.变量名/方法名使用:ALH.age = 91; ALH.gun();
变量
基础的变量类型知识见“基础知识”。
类型的默认值
某个作业的要求,一般都是0或者0相关数值,若无数值则是null(如类)。
| 数据类型 | 默认值 |
|---|---|
| int | 0 |
| long | 0L |
| short | 0 |
| char | '\u0000' |
| byte | 0 |
| float | 0.0f |
| double | 0.0d |
| boolean | false |
| 引用类型(类、接口、数组) | null |
引用类型
Java里面的对象和数组储存时是引用数据类型,只有在new之后才会创建新的内存空间,所以如果不调用new直接复制对象/数组,复制的其实只是地址。
其默认值都为null。
常量
Java里面的常量使用final关键字来修饰。
字面量也是常量,如数字100、0114(0开头为8进制)、0x514(0x开头为16进制);而字符串字面量也是常量,使用方法如"Beihang is the best university"。
自动类型转换
byte,short,char—> int —> long—> float —> double // 从低到高修饰符
分为以下两类:
访问控制修饰符
可以对类、变量、方法、构造方法进行约束,有以下关键词:
- 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方法。
非访问修饰符
static修饰符
就是对于一个类共有的变量,无论一个类建了多少个对象,static修饰的变量只会储存一份。
static一般修饰变量,同时也可以写在类中的方法里,只用在返回变量用static修饰的情形,用来表示返回的值是static xxx类型。
final修饰符
对于变量:
类似于const,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。final 修饰符通常和 static 修饰符一起使用来创建类常量。
对于方法:
父类中的 final 方法可以被子类继承,但是不能被子类重写。
声明 final 方法的主要目的是防止该方法的内容被修改。
对于类:
final 类不能被继承,没有类能够继承 final 类的任何特性。
abstract修饰符
对于类:
abstract表示抽象的类,即类不能被实例化,就光用来调用里面的方法,变量类型为private,比如可以对一个普通类专门写一个抽象类,用来表示类中的方法。
对于方法:
抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。抽象方法不能被声明成 final 和 static。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
意思就是父类先把函数名写好了,里面什么也不放,等着子类继承之后再重写。非常的规范非常的抽象a。
其他修饰符关于线程等内容,主播看不懂一点...
Scanner类
java中用来输入的类。
首先进行读入操作之前先要对类实例化,创建对应的对象,构造方法里面应该写(System.in)
Scanner s = new Scanner(System.in);常用的读取和判断是否读完的方法(From菜鸟教程):
| 基本输入方法 | |
boolean hasNext() | 检查是否有下一个标记(以空格分隔) |
String next() | 读取下一个标记(字符串) |
boolean hasNextLine() | 检查是否有下一行 |
String nextLine() | 读取下一行内容 |
| 类型检查方法 | |
boolean hasNextInt() | 检查下一个标记是否为整数 |
boolean hasNextDouble() | 检查下一个标记是否为双精度浮点数 |
boolean hasNextBoolean() | 检查下一个标记是否为布尔值 |
| 类型读取方法 | |
int nextInt() | 读取下一个整数 |
double nextDouble() | 读取下一个双精度浮点数 |
boolean nextBoolean() | 读取下一个布尔值 |
long nextLong() | 读取下一个长整数 |
float nextFloat() | 读取下一个单精度浮点数 |
short nextShort() | 读取下一个短整数 |
byte nextByte() | 读取下一个字节 |
比如这样使用:
Scanner s = new Scanner(System.in);
int i;
if(s.hasNextInt()){
i = s.nextInt();
}
