一、static
-
1、方法声明中用关键字static修饰的均为类方法或者静态方法,不用static修饰的方法称为实例方法;
-
2、实例方法可以调用该类中的实例方法或者类方法,类方法只能调用该类的类方法或者静态方法,不能调用实例方法(静态方法只能调用静态方法,不能调用非静态方法)
二、java中的访问修饰符(访问权限)
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | √ | × | × | × |
默认 | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
-
1、外部类不能直接使用内部类的成员变量和方法,可以通过先创建内部类的对象,然后通过内部类的实例对象来访问其成员变量和方法;
-
2、如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的的成员变量或方法,如果访问外部类的成员变量,可以使用 this.成员变量名 或者 this.方法() 来访问;
-
3、java中的静态内部类
-
(1)静态内部类不能直接访问外部的非静态成员,但可以通过new 外部类().成员的方式访问;
-
(2)如果外部类的静态成员与内部类的成员名称相同,可以通过类名.静态成员的方式访问;如果外部类的静态成员与内部类的成员名称相同,则可以通过成员名直接调用外部类的静态成员;
-
(3)创建静态内部类的对象时,不需要外部类的对象,可以直接创建内部类:对象名 = new 内部类();
三、其他知识点
-
1、String和Char的区别:
-
(1)String是字符串类型,Char是字符类型;
-
(2)Char要用单引号,String要用双引号;
-
(3)String是一个类,具有面向对象的特性,可以调用方法
-
2、Switch条件语句:
- Switch(表达式){
case 值:代码;
break;
...
default:代码;
break;
}
-
(1)Switch后面小括号的表达式的值必须是整型或者字符型;
-
(2)case后面的值可以是常量数值,也可以是一个常量表达式;
-
(3)case匹配后,执行匹配块的程序代码,如果没有遇到break则会继续执行下一个case块的内容,直到遇到break语句或者Switch语句块结束;
-
3、while(判断条件){ 循环操作 },先判断,后执行
-
4、do {循环操作}while(判断条件),先执行,后判断,至少执行一次
-
5、当一个方法不需要返回数据时,返回类型(修饰符)必须是void;
-
6、intrface常用public修饰,系统会默认加abstract;
-
7、接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上;
-
8、实现接口用implements关键字
-
9、多态体现在:父类 类名 = new 子类();
-
10、数组定义:类名[] 数组名 ,数组中存放该类型的数据;
-
11、多重for循环:外层循环控制行,内层循环控制列;
-
12、公共类(public 修饰的)文件名必须与类名保持一致(相同)
-
13、showSaveDialog()和showOpenDialog()方法决定文件对话框类型(JFileChooser对象)
-
14、一个Java文件中只能含有一个public类
-
15、抽象类的创建方式:abstract class className{ }
-
16、增强for循环:(一般用于遍历数组)
java for(循环变量类型 变量名称:要遍历的对象){ 循环语句; }
//遍历Collection对象
//建立一个collection
String[] string = {"hello","how","are","you"};
Collection list = java.util.Arrays.asList(string);//将数组转换为List对象
//开始遍历
for(String str:list){
System.out.println(str);
}
//遍历数组
int[] a = {1,5,3,7,6,0};
for(int i:a){
System.out.println(i);
}
-
17、基本数据类型的自动装箱与拆箱:
-
基本类型数据和相应的对象之间互相自动转换;
-
拆箱过程
graph LR
数据类型-->相应的对象
-
装箱过程
graph LR
数据对象-->数据类型
-
18、重写接口的方法时,接口中的方法必须是public abstract方法,所以类在继承接口并重写接口方法时不仅要去掉abstract修饰符,给出方法体,而且一定要用public明显地标识出他的访问权限;
-
19、abstract修饰的类不能创建对象,只能继承;
-
20、访问权限:
-
当用某个类在另外一个类中创建对象后,如果不希望该类对象直接访问自己的变量(即不能直接通过“.”运算符来操作自己的成员变量),就应当将成员变量访问权限设置为private;
-
21、静态方法可以通过类名.方法名调用;
-
22、for循环的死循环:
for(;;){
循环体;
}
-
23、数组和集合的区别:
-
(1)数组长度固定且不可变;
-
(2)集合可以在运行时动态变化;
-
24、java中的集合框架体系结构:
graph TD
A[Collection]
A -->B[List可重复]
A -->C[Queue可重复]
A -->D[Set无序不可重复]
B -->E[ArrayList]
C -->F[LinkedList有序]
D -->G[HashSet]
B -->F
H[Map]
H -->I[HashMap]
-
25、在没有引入泛型的概念之前(Java SE 1.5引入泛型的概念),对象存入集合都变成Object,取出时需要类型转换;
-
26、迭代器遍历集合:
Interator it = List.interator();
while(it.hasNext()){
}
-
27、线程:
-
(1) 线程是程序的最小执行单元
-
(2) 线程之间的关系:交互、互斥、同步
-
(3) 线程创建:构造方法
-
Thread()
-
Thread(String)
-
Thread(Runnable target)
-
Thread(Runnable target,String name)
//创建方式一:
Class ThreadName extends Thread{
}
//创建方式二:
class ThreadTest2 implements Runnable{
}
//创建方式三:
Thread thread = new Thread();
//创建方式四:
Thread thread = new Thread(String name);
//创建方式五:
Runnable rb = new Runnable();
Thread thread = new Thread(rd);
//创建方式六:
Runnable rb = new Runnable();
Thread thread = new Thread(rd,String name);
-
(4) 方法
void start(); //启动线程
static void sleep(long millis); //线程休眠、毫秒
static void sleep(long millis,int nanos);//休眠
void join(); //使其他线程等待当前线程终止
void join(long millis); //同上
void join(long millis,int nanos); //同上
static void yield(); //当前运行线程释放处理器资源
static Thread currentThread(); //获取当前线程引用,返回当前运行的线程引用
IO流部分
IO流常用的有:字符流、字节流、缓冲流、序列化流、RandomAccessFile类等
1、字节流
-
FileInputStream/FileOutputStream
-
BufferedInputStream/BufferedOutputStream
2、字符流
-
InputStreamReader / OutputStreamWriter
-
BufferedReader / BufferedWriter
-
FileReader / FileWriter
-
其中BufferedReader / BufferedWriter也称为 字符缓冲流 ,可以一次读一行,一次写一行;FileReader / FileWriter是从InputStreamReader / OutPutStreamWriter继承而来,InputStreamReader / OutputStreamWriter、BufferedReader / BufferedWriter是继承自Reader /Writer;
3、缓冲流(字节流下的缓冲流)
-
BufferedInputStream / BufferedOutputStream
-
缓冲流是属于字节流的
4、RandomAccessFile类
-
RandomAccessFile类从字面意思来看就是随机写入写出,也就是说这个类有可以写入和写出两种方法;
5、对象的反序列化流、序列化流(ObjectOutputStream、ObjectInputStream)
-
序列化流、反序列化流涉及到序列化接口(serializable),想要实现对象的序列化和反序列化,该对象必须继承序列化接口(即implements Serializable)
-
注意:所有的流在完成操作后都需要执行关闭流的操作(即close()方法),同时对于输入流要进行刷新(即flush()方法)操作;
知识点积累
- 1、关于抽象类和接口:
-
-
类不可以多继承而接口可以;
-
-
-
抽象类和接口都不能被实例化;
-
- 2、二维数组:
-
-
二维数组的定义中,第一个括号必须有数值,不能为空,但可为0;
-
- 3、关于抽象类:
-
-
一个子类只能继承一个抽象类,但可以实现多个接口;
-
-
-
抽象类可以有构造方法,接口没有构造方法;
-
-
-
抽象类可以有普通成员变量,接口不能有普通成员变量;
-
-
-
抽象类和接口都可以有静态成员变量,抽象类中的静态成员变量访问权限任意,接口只能是public static final(默认);
-
-
-
抽象类可以没有抽象方法,抽象类可以有普通方法, 接口中都是抽象方法;
-
-
-
抽象类可以有静态方法,接口不能有静态方法;
-
- 4、关于final的重要知识点:
-
-
final关键字可以用于成员变量、本地变量、方法以及类;
-
-
-
final修饰的成员变量必须在声明时被初始化,或者在构造器中初始化,否则就会报编译错误;
-
-
-
不能够对final变量再次赋值;
-
-
-
本地变量必须在声明时赋值;
-
-
-
在匿名类中所有变量都必须是final变量;
-
-
-
final修饰的方法不能被重写;
-
-
-
final修饰的类不能被继承;
-
-
-
没有在声明时初始化的final变量称为空白final变量(blank final variable),他们必须在构造器中初始化,或者调用this进行初始化,不然编译器会报错
-
- 5、操作数据类型为byte、short、int 、char时,两个数都会被转换成int类型,并且结果也是int类型(在进行+,-,*,/,%运算操作时)
- 6、方法入参:
-
-
方法入参是基本类型时,传递的是值,方法内对传递值进行修改时不会影响调用是的变量;
-
-
-
方法入参是引用类型时,传递的是引用地址,方法内对传递值进行修改时会影响调用时的变量;
-
package com.javasm.work3;
import java.util.Arrays;
public class TestMethod {
public static void main(String[] args) {
TestMethod method=new TestMethod();
int b = 1;
b = method.test1(b);
System.out.println(b);
int[] arr = {1,2,3};
method.test2(arr);
System.out.println(arr[0]);
System.out.println(arr);
Arrays.sort(arr);
}
/**
* 方法入参是基本数据类型时,传递的是值
* 方法内对传递的值进行修改时不会影响调用时的变量
* @param a
*/
public int test1(int a){
a=2;
return a;
}
/**
* 方法入参是引用数据类型时,传递的是内存地址引用
* 方法内对传递的引用进行修改时会影响调用时的变量
* @param arr1
*/
public void test2(int[] arr1){
System.out.println(arr1);
arr1[0] = 4;
}
}