1.文件名应与类名一致。
2.String args[] 与 String[] args 都可以执行,但推荐使用 String[] args,这样可以避免歧义和误读。
3.只支持类之间的单继承,但支持接口之间的多继承。
4.Java是解释型语言。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。 对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,所以它是解释型的语言。
5.如果遇到编码问题,我们可以使用 -encoding 选项设置 utf-8 来编译:javac -encoding UTF-8 HelloWorld.java
6.类名的首字母应该大写。方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
7.文件名与类名关系 https://blog.csdn.net/qq_42449963/article/details/106199732
8.数组是储存在堆上的对象。
9.多行注释 /* */ 单行注释 //
10.类变量声明在类中,方法体之外,但必须声明为 static 类型。实例变量独立于方法之外的变量,不过没有 static 修饰。
11.在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
12.一个源文件中只能有一个 public 类。
13.如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
14.包主要用来对类和接口进行分类。
15.Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
16.byte 数据类型是8位、有符号的,默认值是 0,byte 变量占用的空间只有 int 类型的四分之一。
17.short 数据类型是 16 位、有符号的以二进制补码表示的整数,默认值是 0。
18.int 数据类型是32位、有符号的以二进制补码表示的整数,默认值是 0。
19.long 数据类型是 64 位、有符号的以二进制补码表示的整数,默认值是 0L。 long a = 100000L,Long b = -200000L。"L"理论上不分大小写。
20.float 数据类型是单精度、32位,默认值是 0.0f,浮点数不能用来表示精确的值,如货币 float f1 = 234.5f。
21.【java】为什么浮点数不能精确表示?_Mr_zhang66的博客-CSDN博客_浮点数无法精确表示浮点数为什么不精确?_renwotao2009的专栏-CSDN博客_浮点数为什么不精确【java】为什么浮点数不能精确表示?_Mr_zhang66的博客-CSDN博客_浮点数无法精确表示
22.double 数据类型是双精度、64 位,默认值是 0.0d。
23.字面量: 是一个 int 字面量,而 7D,7. 和 8.0 是 double 字面量。
24.boolean:false
25.JAVA中还存在另外一种基本类型 void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
26.char 类型是一个单一的 16 位 Unicode (万国码)字符,char 数据类型可以储存任何字符。
27.默认值表
28.在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。对象、数组都是引用数据类型。所有引用类型的默认值都是null。一个引用变量可以用来引用任何与之兼容的类型。
29.常量在程序运行时是不能被修改的。在 Java 中使用 final 关键字来修饰常量,final+类型+变量名 = value
30.空格字符是空一格,空字符是什么都没有,前者是对象的值,后者是空字符串。
31.不能对boolean类型进行类型转换,不能把对象类型转换成不相关类的对象,在把容量大的类型转换为容量小的类型时必须使用强制类型转换,浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。
32.强制类型转换:(type)value
33.整数的默认类型是 int,小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
34.访问修饰符不能用于局部变量,局部变量是在栈上分配的,局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
35.实例变量可以声明在使用前或者使用后,实例变量具有默认值。
36.无论一个类创建了多少个对象,类只拥有类变量的一份拷贝,静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量,静态变量在第一次被访问时创建,在程序结束时销毁,默认值和实例变量相似。
37.修饰符主要分为两类:访问修饰符、非访问修饰符。
38.
39.接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。
40.类和接口不能声明为 private。
41.protected 需要从以下两个点来分析说明:
-
子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
-
子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。
42.protected含义:子类能访问 protected 修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。
43.三种修饰符的作用:
如果把 openSpeaker() 方法声明为 private,那么除了 AudioPlayer 之外的类将不能访问该方法。
如果把 openSpeaker() 声明为 public,那么所有的类都能够访问该方法。
如果我们只想让该方法对其所在类的子类可见,则将该方法声明为 protected。
44.继承的规则:
-
父类中声明为 public 的方法在子类中也必须为 public。
-
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
-
父类中声明为 private 的方法,不能够被子类继承。
45.static:类的静态变量和 静态方法就可以直接用类名进行访问
-
静态变量:
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
-
静态方法:
static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
46.final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。final 修饰符通常和 static 修饰符一起使用来创建类常量。父类中的 final 方法可以被子类继承,但是不能被子类重写。声明 final 方法的主要目的是防止该方法的内容被修改。final 类不能被继承,没有类能够继承 final 类的任何特性。
47.final与static的区别,final强调最终态,因此定义时候必须赋值,static强调只有一份拷贝,存在于“类”这一层面(而非对象实例层面)。
48.抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。抽象方法不能被声明成 final 和 static,抽象方法的声明以分号结尾。
49.synchronized 关键字声明的方法同一时间只能被一个线程访问。
50.volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个 volatile 对象引用可能是 null。
51.transient??
52.与逻辑运算符:短路逻辑运算符。
53.instanceof运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
54.
55.Java5 引入了一种主要用于数组的增强型 for 循环。
56.break 主要用在循环语句或者 switch 语句中。
57.continue 适用于任何循环控制结构中。
58.从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
59.当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句,不用再次匹配。default 分支不需要 break 语句。
60.Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
61.compareTo() 方法用于将 Number 对象与方法的参数进行比较。两个不同类型的数据不能用compareTo()来比较。如果指定的数与参数相等返回0。如果指定的数小于参数返回 -1。如果指定的数大于参数返回 1。
62.equals() 方法用于判断 Number 对象与方法的参数进是否相等。,如 Number 对象不为 Null,且与方法的参数类型与数值都相等返回 True,否则返回 False。
63.
64.
65.字符串有两种方法,String直接赋值,或者用new(),String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上。
66.String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。
67.String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
68.
69.Java内存分配(堆、栈和常量池)_张震的博客-CSDN博客_公共池和堆
70.StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
71.
以下是 StringBuffer 类支持的主要方法:
序号 | 方法描述 |
---|---|
1 | public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
2 | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3 | public delete(int start, int end) 移除此序列的子字符串中的字符。 |
4 | public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。 |
5 | insert(int offset, String str) 将 str 参数的字符串插入此序列中。 |
6 | replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。 |
以下列表列出了 StringBuffer 类的其他常用方法:
序号 | 方法描述 |
---|---|
1 | int capacity() 返回当前容量。 |
2 | char charAt(int index) 返回此序列中指定索引处的 char 值。 |
3 | void ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值。 |
4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst 。 |
5 | int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。 |
6 | int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
7 | int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 |
8 | int lastIndexOf(String str, int fromIndex) 返回 String 对象中子字符串最后出现的位置。 |
9 | int length() 返回长度(字符数)。 |
10 | void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch 。 |
11 | void setLength(int newLength) 设置字符序列的长度。 |
12 | CharSequence subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此序列的子序列。 |
13 | String substring(int start) 返回一个新的 String ,它包含此字符序列当前所包含的字符子序列。 |
14 | String substring(int start, int end) 返回一个新的 String ,它包含此序列当前所包含的字符子序列。 |
15 | String toString() 返回此序列中数据的字符串表示形式。 |
72. 建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
73.一、使用 dataType[arraySize] 创建了一个数组。二、把新创建的数组的引用赋值给变量 arrayRefVar。
74.
75.高维数组,同一维长度可以不同。
76.Arrays 类
序号 | 方法和说明 |
---|---|
1 | public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 |
2 | public static boolean equals(long[] a, long[] a2) 如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
3 | public static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
4 | public static void sort(Object[] a) 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
77.---Date----
78.正则表达式的两种方式:
1. // 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
2. String pattern = ".*runoob.*";
boolean isMatch = Pattern.matches(pattern, content);
79.方法重载需要满足2个条件,一个是参数的个数不同,一个是参数个数相同,但参数列表中对应的某个参数的类型不同。
80.构造方法和它所在类的名字相同,但构造方法没有返回值。
81.Java支持传递同类型的可变参数给一个方法,在指定参数类型后加一个省略号(...) 。一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
82.finalize()它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。例如,你可以使用 finalize() 来确保一个对象打开的文件被关闭了。在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。
83.从控制台读取数据,BufferedReader br = new BufferedReader(new InputStreamReader (System.in)),BufferedReader 对象创建后,我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() 方法读取一个字符串。
84.向控制台输出:System.out.write()、System.out.print()、System.out.println(b)
85.FileInputStream:
可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream f = new FileInputStream("C:/java/hello");
也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来 创建一个文件对象:
File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);
86.
1 | public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 |
2 | protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。 |
3 | public int read(int r)throws IOException{} 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。 |
4 | public int read(byte[] r) throws IOException{} 这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。 |
5 | public int available() throws IOException{} 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
87.FileOutputStream,该类用来创建一个文件并向文件中写数据。如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
OutputStream f = new FileOutputStream("C:/java/hello")
也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一 个文件对象:
File f = new File("C:/java/hello"); OutputStream fOut = new FileOutputStream(f);
创建OutputStream 对象完成后,就可以使用下面的方法来写入流或者进行其他的流操作。
88.构建OutputStreamWriter对象,参数可以指定编码,OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8")。,默认为操作系统默认编码,windows上是gbk
89.创建目录:
- mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
- mkdirs()方法创建一个文件夹和它的所有父文件夹。
90.如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。
91.当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
92.删除文件可以使用 java.io.File.delete() 方法,f.delete(),想删除可以用递归算法。
93.