以下内容若有误,欢迎私信我或在下方留言,谢谢^_−
基础语法
1.注释(以IDEA为例)
(1)单行注释
说明:单行注释一般注释少量的代码或者说明内容。
// 这里是单行注释
使用方法:快捷键Ctrl + / 或直接输入 //
(2)多行注释
说明:多行注释一般注释大量的代码或者说明内容
/*这里是多行注释*/
使用方法:快捷键Shift + Ctrl + / 或 输入 /* 后回车
(3)文档注释
说明:文档注释一般用于对类或方法进行功能说明
/**
* @Author regex
* 这里是文档注释
*/
使用方法:输入 /** 后回车
2.标识符
Java中所有的组成部分都需要有名字。类名、变量名以及方法名都被称为标识符。
(1)关键字
以下为JDK 8版本的关键字,关键字都是小写。
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
部分关键字介绍:
- static:意思是“静态的”,用来修饰成员变量和成员方法,也可以形成静态代码块。被static修饰的成员变量和成员方法将独立于该类的任何对象,也就是说,它并不依赖类特定的实例,能够被类的所有实例所共享。与类一起加载,只执行一次。
public class Demo {
// 定义一个static变量,也称为类变量
static String name = "regex";
// 定义一个non-static变量,也称为实例变量
int age = 20;
public static void main(String[] args) {
// 可以直接使用类变量
System.out.println(name);
// 需要创建一个对象才能使用
Demo demo = new Demo();
System.out.println(demo.age);
}
}
- final:意思是“最终的”,用于修饰变量、方法和类。若修饰基本类型的变量,则该变量的数值一旦被初始化就不能再更改;若修饰引用类型的变量,则被初始化后就无法再指向另一个对象;若修饰方法,则该方法无法被子类重写;若修饰类,则该类无法被继承。被final修饰的,由于无法被继承,会断子绝孙。
public class DemoFinal {
final class People{
public People() {
}
}
// 报错:Cannot inherit from final 'DemoFinal.People'
// final修饰的不能被继承
class Man extends People{
}
static final double PI = 3.14;
public static void main(String[] args) {
// 报错:Cannot assign a value to final variable 'PI'
// final修饰的不能被修改
PI = 3.1415;
}
}
- try、catch、finally:这三个关键字一般情况都是成套出现,常用于异常处理。try用来监控区域,catch用来捕获异常,finally用来进行善后处理,例如在IO流中用于释放资源。需要注意的是,被finally圈起来的语句一定会执行,除非JVM退出。
try { // 监控区域
// 可能发送异常的语句
} catch (Exception e) { // 捕获异常,Exception可以是其它类型的异常
e.printStackTrace(); // 向控制台打印异常信息,或其他异常处理的代码
} finally { // 善后处理,无论是否发生异常,都会执行
// IO流中可以用于释放资源
}
- super、this:super和this的用法相似,只不过this代表的是本类对象的引用,而super代表父类存储空间的标识,可以理解为父类对象的引用。
public class Person {
// 父类属性
public int age = 15;
}
public class Student extends Person {
// 子类属性(成员变量)
public int age = 18;
// 子类方法(成员方法)
public void print() {
// 局部变量
int age = 20;
System.out.println(age);
// 访问本类成员变量使用this
System.out.println(this.age);
// 访问父类成员变量使用super
System.out.println(super.age);
}
}
/*测试类*/
public class Test {
public static void main(String[] args) {
// 创建对象,调用方法
Student student = new Student();
student.print();
}
}
/*
运行结果:
20
18
15
*/
(2)定义标识符的规范要求
- 由字母(A-Z、a-z)、美元符($)、下划线(_)或者数字(0-9)的任何字符组合,但不能以数字开头。
- 严格区分大小写。
- 不能使用关键字。
- 包名所有字母一律小写。如com.regex.test
- 类名和接口名每个单词的首字母都要大写。如ArrayList、Iterator
- 常量名所有字母都大写,单词之间用下划线连接。如DAY_OF_MONTH
- 变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写(驼峰命名)。如lineNumber、getLineNumber
- 尽可能使用有意义的英文单词或者组合定义标识符。如username表示用户名
3.数据类型
注意:
数据类型 默认值 byte、short、int、long 0 float、double 0.0 char ‘\u0000’ boolean false 引用数据类型 null 使用long或float需在对应数字后面加上相应类型的首字母大写,如
long num_l = 20L; float num_f = 20.13F;
4.变量作用域
- 类变量
- 实例变量
- 局部变量
public class DemoVariable {
// 类变量,使用static修饰符
static int year = 2021;
// 实例变量,从属于对象,若不自行初始化,则为默认值(0/0.0/false/null)
String s = "Hello World!";
public static void main(String[] args) {
// 局部变量,必须声明和初始化值才能使用
int a = 2;
int b = 0;
double c;
System.out.println(a + b);
// 报错:Variable 'c' might not have been initialized
System.out.println(c);
}
}
拓展1:强类型语言和弱类型语言
(1)强类型语言
强类型语言是一种强制类型定义的语言,要求变量的使用必须严格符合定义,一旦该变量被指定类型,如果不进行强制类型转换,则该变量不会改变原来的数据类型。强类型语言有Java、.net、Python等。
// num被定义为int类型
int num = 20;
/*报错:
Required type:int
Provided:double
*/
num = 20.20;
(2)弱类型语言
弱类型语言与强类型语言相反,数据类型可以被忽略的语言。当变量被指定类型后,该变量可以根据环境需要改变自身的数据类型,因此,一个变量可以赋不同数据类型的值。弱类型语言有PHP、JavaScript等。
// a被赋予整数型的值
var a = 20;
// a被赋予浮点型的值
a = 20.2;
// 输出结果为“20.2”
window.alert(a)
(3)两者区别
强类型语言和弱类型语言,可通过“定义的变量被赋值后能否被赋予其他类型的值”进行判断。弱类型语言有时显得很方便、速度快,但有时却又极易出错。相比于强类型语言,强类型语言的严谨性则能避免数据类型上一些不必要的错误。
拓展2:位、字节、字符
(1)位(bit)
位是计算机内部数据储存的最小单位。在计算机中的二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit)。
(2)字节(Byte)
字节是计算机中数据处理的基本单位,一般用大写B表示。
(3)字符
字符是指计算机中使用的字母、数字、字和符号。
(4)单位转换:
1B (Byte,字节)=8b(bit,比特)
1KB(Kilobyte,千字节)= 1024B
1MB(Megabyte,兆字节)= 1024KB
1GB(Gigabyte,吉字节,千兆字节)= 1024MB
1TB(Trillionbyte,万亿字节,太字节)= 1024GB
1PB(Petabyte,千万亿字节,拍字节)= 1024TB
1EB(Exabyte,百亿亿字节,艾字节)= 1024PB
1ZB(Zettabyte,十万亿亿字节,泽字节)= 1024EB
1YB(Yottabyte,一亿亿亿字节,尧字节)= 1024ZB
1BB(Brontobyte,千亿亿亿字节)= 1024YB
(5)电脑32位和64位的区别是什么?
①支持的内存不同(寻址能力不同)
32位系统最多支持4G内存,而64位系统可以支持4G、8G、16G、32G、64G、128G等。
②支持的处理器不同
64位系统支持64位和32位的CPU,而32位系统无法完全支持64位的CPU。
③支持的软件不同
64位系统支持32位和64位软件,32位系统仅支持32位软件。
④数据处理能力不同
32位计算机的CPU一次最多只能处理32位数据,而64位一次可以处理64位数据,理论上64位系统会比32位系统快1倍。
⑤系统体积不同
64位系统相比32位系统体积会大得多。
⑥设计初衷不同
32位系统仅适用于一般用户,而64位系统能够满足机械设计和分析、三维动画、视频编辑和创作、科学计算等领域的需求。
拓展3:整数进制
(1)二进制:0b开头
(2)八进制:0开头
(3)十六进制:0x开头
拓展4:Java运算自动提升类型
public class Demo01 {
public static void main(String[] args) {
short a = 10;
short b = 2;
// 报错:Inconvertible types; cannot cast 'int' to 'java.lang.String'
// 由报错可知,a + b被自动提升为int类型
System.out.println((String)(a + b));
// 进行强转类型
System.out.println((short)(a + b));
}
}
原因:在Java运算中,当数据类型的范围小于int的范围(如byte,char,short)时,数据类型会自动提升为int类型。比如,两个short类型的数据在进行运算时,运算结果就会变成int类型;如果需要结果是short类型,则需要强转成short类型,这是java编译器内部对其进行处理的原因。
【程序员养成之路】Java基础篇 3-反手就能写个冒泡排序的数组
【程序员养成之路】Java基础篇 5-从异常机制认识常见bug
【程序员养成之路】Java基础篇 7-流进流出的IO流(一)
【程序员养成之路】Java基础篇 8-流进流出的IO流(二)
【程序员养成之路】Java基础篇 9-认识一下类加载器与反射