文章目录
1. 第⼀个 Java 程序
打开终端,输⼊
在终端将上述代码存放到 Hello.java 中,使⽤ javac Hello.java 编译代码,⽣成⼀个Hello.class ⽂件,接着使⽤ java Hello 来运⾏程序。
Java 源程序与编译型运⾏区别
基础语法
- 对⼤小写敏感
- 类名应当⼤写开头
- ⽅法名要小写开头
- 源⽂件名要和类名相同
- 标识符由字⺟、下划线或 $ 打头,不能是关键字
2. Java 对象和类
看⼀个简单的类:
这个类描述了小狗,属性包含:名字、颜⾊和年龄,类⾥⾯的函数称为⽅法。
类中包含了⼀个 static 的静态⽅法,可以⾃动执⾏,不需要对象调用。
this 关键字:
当实例变量和局部变量重名,JAVA平台会按照先局部变量、后实例变量的顺序寻找。
如果使⽤this.name,则不会在⽅法(局部变量)中寻找变量name,而是直接去实例变量中去寻找。
当实例变量和局部变量名字不重复时,可以不使⽤ this,编译器会⾃动加上 this。
2.1 构造器
⼀般构造函数 public 可加可不加。如果加上 public,就代表此类可以对外开放,其他的类可以继承它,外部也可以实例化该对象;如果不加 public,则默认的修饰词是protected,代表只对同包开放。
2.2 创建对象和访问实例
2.3 java包
import java.io.* // 导入java_installation/java/io下的所有类
3. 数据与变量
3.1 基本数据类型
Java 为每⼀个内置数据类型都提供了对应的
包装类:Float, Double, Boolean, Byte, Short, Integer, Long, Character.
java Math类:
3.2 基本变量类型
- 类变量:独⽴于⽅法之外的变量,⽤ static 修饰;
- 实例变量:独⽴于⽅法之外的变量,不过没有 static 修饰;
- 局部变量:类的⽅法中的变量。
类变量属于静态变量,⽆论⼀个类有多少个对象,类变量都共⽤⼀个!
4. Java 修饰符
4.1 访问控制修饰符
Java ⽀持四种不同的访问权限:
- default:在同⼀包内可⻅,不使⽤任何修饰符。使⽤对象:类、接口、变量、⽅法。
- private : 在同⼀类内可⻅。使⽤对象:变量、⽅法。 注意:不能修饰类(外部类)
- public : 对所有类可⻅。使⽤对象:类、接口、变量、⽅法
- protected : 对同⼀包内的类和所有⼦类可⻅。使⽤对象:变量、⽅法。 注意:不能修饰类(外部类)。
4.2 ⾮访问修饰符
static
静态变量:static 关键字⽤来声明独⽴于对象的静态变量,⽆论⼀个类实例化多少对象,它的静态变量只有⼀份拷⻉。
静态函数:static 关键字⽤来声明独⽴于对象的静态⽅法。静态⽅法不能使⽤类的⾮静态变量。
注意:在静态⽅法中调⽤⾮静态⽅法时,编译器会报错(因为⾮静态⽅法只有实例化的对象能够调⽤, 而静态⽅法执⾏的过程中未调⽤构造函数实例化对象,因此不允许调⽤!)
解决办法为要么创建⼀个类的对象,通过对象来调⽤函数,要么将⾮静态⽅法声明中加上 static 改为静态⽅法,同时将变量声明为全局静态的。
final
被 final 修饰的实例变量必须显式指定初始值,之后不能再修改。
5. 程序的逻辑结构
常⻅循环结构如下:
常⽤的分⽀结构如下:
6. String 字符串
6.1 字符串的存储
函数 System.identityHashCode(str) 可以打印出字符串 str 地址对应的哈希值
使⽤ String str = “xxxxx”; 声明的字符串存储在公共池⾥,存储字符串内容相同的字符串变量 相当于引⽤;
使⽤ new String(“xxxx”); 得到的字符串地址在堆内,每次 new 得到的对象地址不同;
6.2 字符串相关函数
长度length()
格式化字符串:String.format(str, args)
String 类使⽤静态⽅法 format() 返回⼀个String 对象
字符索引查询: indexOf()
字符串分割:split()
子串:substring()
⽐较函数: equals
填补⼀个⼤坑: equals ⽐较的是内容是否相等、 == ⽐较的是引⽤的变量地址是否相等。
7. StringBuffer 和 StringBuilder 类
7.1 特点
StrngBuilder 和 StringBuffer 类的对象⽀持多次的 ,而且并且不产⽣新的未使⽤对象!
- StringBuilder 的⽅法不是线程安全的,但速度⾼(不能同步访问)。
- 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使⽤ StringBuilder 类。
7.2 StringBuilder 和 StringBuffer 的使用
常⽤函数的语法如下(StringBuilder 和 StringBuffer 的使⽤⽅法⼏乎相同):
举个例⼦:
输出的结果为:
8. 数组的使⽤
声明与创建:
数组的访问与修改:
可以使⽤ Arrays 类的函数来对数组操作:
9. Java ⽅法
9.1 方法的定义与调用
⼀个⽅法包含了 修饰符、返回值类型 、方法名 、参数 和 ⽅法体 构成。
在不创建类对象的情况下,主函数可以调⽤静态⽅法:
9.2 可变参数
可变参数的声明⽅式为:
typeName... parameterName
举个例⼦:
此处传⼊的参数有很多个,可以像数组⼀样来访问传⼊的参数。
10. 时间和日期
10.1 查看时间
java.util 包提供了 Date 类来封装当前的⽇期和时间,可以 new ⼀个 Date 对象:
10.2 格式化输出时间
10.3 测量时间
Thread.sleep(1000) 休眠 1000ms
System.currentTimeMillis() 获取毫秒数
10.4 Calendar 类
11. 输⼊与输出
11.1 Scanner 类
Java 提供了 Scannner 类,可以设置参数来从键盘读取数据,创建 Scanner 对象如下:
11.2 读取字符串
输⼊字符串的⽅式有两种:
next()
- ⼀定要读取到有效字符后才可以结束输⼊
- 输⼊⼀⾏时,以空格分隔字符串,因此不能得到带有空格的字符串;
nextLine() - 输⼊⼀⾏,以换⾏符结束,能读取有空格的
- 字符串可以读取空⽩内容
举个例⼦:(输⼊为 “hello world”)
11.3 读取数字
下⾯的程序对输⼊的所有数字求和,当输⼊不是 double 类型时(如字符串),程序会终⽌。
12. 异常捕获
使⽤ try-catch 来捕获 异常:
可以有多个 catch 来捕获不同类型的错误;不论是否存在异常, finall 关键字中的语句都会被执 ⾏。输出结果为:
13. data structure
Java 提供了⼀系列的存储数据结构和相应的算法,各种容器由 Collections 继承而来,算法可以通过 Collections 类来调⽤;容器的创建⽅法如下:
13.1 ArrayList
ArrayList 类是⼀个可以动态修改的数组,与普通数组的区别就是它是没有固定⼤小的限制;
13.2 Stack
Stack 常⽤的⽅法有: boolean empty() , E push() , E pop() , E peek()
除此之外,Java 还有 Vector , LinkList , Queue , Dictionary 等常⽤容器。