2020/1/10 JAVA复习笔记

1.基础模块

1.标识符定义规则:由字母、数字、_ 、$,不能以数字开头
2.注释(三种)
3.变量

  • 局部变量(使用前必须给定初值):存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存
  • 类成员变量存在于堆内存中,和类或对象一起创建,属于类或者接口
    基本数据类型: int = 0, long =0, float = 0.0, double = 0.0, boolean=false
    对象数据类型: 默认值都为null

4.命名-驼峰命名法
5.常量

  • final 类型 常量名=值
  • 常量名通常全部大写

6.Unicode编码

  • 使用两个字节(16位)的Unicode编码
  • 通常用十六进制, ‘\u0000’~’\u00ff’表示ASCII

7.运算符

  • 关系运算符
    • instanceof:确定某一对象是否为指定类对象
  • 逻辑运算符: &,|,^(异或,不同时为真),&&,||
  • 位运算符
    • a&b,a|b,a^b,~a
    • a>>b(右移b位),<<,>>>(无符号右移,慎重)
  • 优先级
    • 优先级相同考虑结合性,大多数结合性从左到右 ,赋值运算符从右到左
    • () > 单目 > 双目 > 三目 > 赋值
    • 算术 > 关系 > 逻辑

8.输入输出

8.1 I/O

  • 输入:把需要加工的数据放到程序中,read;
  • 输出: 把程序处理的结果呈现给用户;
  • 标准输入输出: 一般蚕蛹键盘和显示器作为标准输入输出设备,并通过System.in和System.out对象与其分别产生联系

8.2 标准输入输出

  • System.out方法:
println(参数)
print(参数)
  • System.in:字节流,从标准输入读入一个字节
int read()//从流中读取一个字节,并将其作为整数返回,没有则返回-1;
int read(byte b[])//从流中读取多个字节放大到b中,并返回读取字节数
int read(byte b[],int off,int len)//读取最多len个字节数据,放到数据b的下标off开始的单元,返回读取字节数

9.控制语句

  • switch-case:表达式 必须是整型; 没有break则转移到下个case继续执行
  • for(变量:集合)

10.数组

  • 数组是独立的类,有自身的方法
  • 创建数组的工作:声明变量,建立数组对象(创建数组空间)并赋予,存储信息
String[] list = new String[2];
list[0]=“one";
  • 二维数组不一定是规则的
int[][] a=new int[3][];
a[0]=new int[3];
a[1]=new int[5];
  • java.util.Arrays相关系统函数
public static String toString(int[] a) 
public static void sort(int[] a)
public static int binarySearch(int[], int key)

链接: Arrays用法总结.

2.面向对象

2.1类

2.1.1类首

修饰符权限
缺省(默认)friendly被同一个包中类访问
public被所有类访问
abstract不能实例化,可能包含未实现的方法
final无法被继承
extends单继承
implements多个实现接口

2.1.2 类体

2.1.2.1 成员变量

  • 访问权限修饰符 :缺省,public(尽量不要使用),protect,private
  • static
    • 类变量/静态变量 :可通过类或对象访问
    • 对象变量/实例变量
  • final
变量常量
类变量(static)类常量(final static)(定义时赋值)
对象变量对象常量(final)(要给初始值,定义时或构造函数)
局部变量局部常量(fianl)

2.1.2.2 成员方法

  • 修饰符
    • 访问修饰符:缺省,public(),protect,private
    • 非访问修饰符:static , abstract , final , native ,synchronized
  • 方法的调用
    【java】this()与super()使用详解
  • 方法重载(仅返回类型不同不可以),实现多态性:个数,类型,类型的顺序

2.2 构造方法与对象的创建

2.2.1 对象的成员变量初始化

  • 自动初始化 / 成员方法显式初始化 / 构造方法
  • 构造方法:
    • 没有返回类型,不能写void;一般用new调用;每个类至少一个,没有系统则自动提供缺省的一个构造方法
    • 显示定义一个或多个构造方法,且其都带参数,缺省构造方法失效
    • 构造类实例时,编译器完成
      • 为对象分配内存空间(
      • 缺省值初始化对象中实力变量的值
      • 调用对象构造方法
        在这里插入图片描述
  • 计算某个类创建对象的个数
class T{
    piblic static int tc=0;
    public T{
        tc=tc+1;
        }
class P{
   public static void mian(String[] args){
       T  t1 = new T();
       System.out.println(T.tc);
       T  t2 = new T();
       System.out.println(T.tc);
       }
  • 确保一个类只创建一个对象
/*
单例模式:一个类仅有一个实例并且自行实例化向整个系统提供
*/
class T{
	static T tobj=new T();
	private T(){}
	public static T getInstance(){
		return tobj;
		}
   }
class P{
  pubic static void  main(String args[]){
    T t1=T.getInstance();
    T t2=T.getInstance();
    System.out.println(t1==t2);
    }
 }
  • new操作符:
    以类为模板,开辟空间并执行相应构造方法,完成对象实例化和初始化,并返回对象的一个引用(即该对象所在内存首地址)

2.3 继承

  • 属性继承,隐藏和添加
    静态成员变量为该类与子类共有,若子类有同名的静态成员变量,则相互独立
public class test {
public static int age;
}

class test2 extends test{
  public static int age;
  public static void main(String[]  args) {
  	test2 t1=new test2();
  	test2.age=20;
  	System.out.println(t1.age);
  	test test = (test)t1;
  	System.out.println(test.age);
  }
}     
结果:20
      0
  • 方法的继承(非私有)
  1. 继承后的特点——成员方法:
    成员方法不重名:如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法
    //
  2. 继承后的特点——成员变量
    即使子类声明了与父类完全一样的成员变量,也不会覆盖掉父类的成员变量。而是在子类实例化时,会同时定义两个成员变量,子类也可以同时访问到这两个成员变量(this.i&super.i),但=父类不能访问到子类的成员变量(父类不知道子类的存在)
    具体在方法中使用成员变量时,究竟使用的是父类还是子类的成员变量,则由方法所在的类决定;即,方法在父类中定义和执行,则访问的是父类的成员变量,方法在子类中定义(包括覆盖父类方法)和执行,则访问的是子类的成员变量。

覆盖(首部一样,方法体不同)

  • 访问修饰符,访问范围需要大于等于父类的访问范围

重载(方法名相同,参数列表不同,不能为private)(子类中有两个方法,父类不会被覆盖)

  • 参数列表不同指的是参数个数、参数类型或者参数的顺序不同
  • 不能通过访问权限、返回类型、抛出的异常进行重载。
  • 重载使用静态绑定!!!!

添加

  • 子类不允许降低成员的访问权限
  • 构造方法不能被继承,但子类的构造方法能确保他的父类构造方法都能被调用

2.3.1 super

2.3.1.1 使用场景
  • 子类隐藏超类成员,但又要使用
    在这里插入图片描述

  • 子类引用超类构造方法:super([参数表])

2.2.3.2 注意事项
  • 不能在static 环境使用
  • 可以不明确使用也可以明确使用(尽量明确使用)
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

2.2.3.3 构造方法调用顺序
  • 首先调用父类,反复递归,使继承阶乘的根源最先被构建,然后子层知道最末层
  • 根据各个成员声明顺序,执行成员变量的初始化赋值
  • 执行该构造方法的个语句

2.3.2 父类对象与子类对象转换

*子类到父类:显示或者隐式,直接赋值
*父类只能强制转换其实际指向的子类对象
*父类对象形参可以换成子类对象形参

2.4 abstract与final

2.5 接口

2.5.1 接口的说明

  • 格式: [修饰符] interface 接口名 [extends] [接口列表]{接口体}
  • 修饰符:缺省(同包访问),public(任意)
  • 接口体(定义常量和抽方法)
    成员变量:隐含 public static final
    成员方法: 隐含 public abstract
  • 接口的引用:任何实现该接口的类的实例都可以存储在在接口类型的变量中,通过这些变量访问类实现的接口中的方法(Runner r = new Person() )
  • 接口应用:回调 (java.swing.Timer / java.awt.event ActionListener 接口 / Date类 / DataFormat ……)

2.5.2 多态

两种不同时期的多态:
编译时期多态:其又被称为静态多态,编译时期的多态是靠重载实现的,根据参数个数,类型和顺序决定的(必须在同一个类中)
运行时的多态:运行时期的多态是靠方法的重写实现的,在编译期间被视作相同方法,但是运行期间根据对象的不同调用不同的方法

  • 继承(覆盖)
  • 向上转型
  • 绑定:将一个方法调用同一个方法主体连接到一起称为“绑定”(Binding)
    • 静态绑定:在程序运行之前执行绑定,由编译器决定方法调用的程序,称为“早期绑定”或“静态绑定”
    • 如果绑定过程在程序运行期间进行,以对象的类型为基础,则称为“后期绑定”或“动态绑定”。
      成员变量静态绑定,成员方法动态绑定
      Java中的静态绑定与动态绑定事例赞!!!
      (补充:动态绑定只适合重写覆盖的方法)

2.5.3 包

2.6 JAVA变量及其传递

  • 基本数据变量与引用型数据变量(复杂数据的存储地点,包括类 、 数组(字符串) 、接口)

    举例子:
    在这里插入图片描述
    在这里插入图片描述

  • 成员变量与局部变量(见上)

  • 2.6.1 重点:变量的传递

  • 总结在这里插入图片描述
    在这里插入图片描述
    用例2
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
总结:Java——值引用和对象引用
1.java中只有值传递(值传递:调用函数的时候,只传递参数的副本)
2.如果参数是基本数据类型:那么函数中对此参数副本的改变,并不会影响原函数中的参数值。
3.如果参数是引用数据类型:那么由于原参数和参数副本指向同一个对象,所以参数副本对对象中成员变量的改变,会引起原参数指向的对象的改变
在这里插入图片描述

2.6.2 引用型常量的比较

  • ==和!=只能判断运算符两边引用的是不是同一个对象,即对象引用值(栈)
  • equals()方法比较对象实体值是否相同
    但要注意下面这个例子

在这里插入图片描述
原因:见下面4.1

  • 可在自己定义的类里面重写equals()方法
piblic boolean equals(Object obj){
	return (this == obj);
	}

2.6.3 内部类

3. 异常处理

4. JAVA的基本类库

4.1 JAVA语言包(java.lang)

  • JAVA自动import了该类,程序中可直接使用类名

4.1.1 字符串类

4.1.1.1 String类
  • 不可改变的静态字符串
  • 所有字符串常量都是String对象,存储在String pool(字符串池)中,字符串池是常量池的一部分
  • Java为了节省内存空间、提高运行效率,编译时将String Pool中所有相同的字符串合并,并只占用一个空间
  • 关于赋值的时候的引用
    1.直接在常量池生成对象并引用在这里插入图片描述
    2.在常量池和堆内存都生成对象,但引用堆内存的在这里插入图片描述
  • 关于修改:所有方法都不会修改String类对象内容,除非创建一个新的String对象
    在这里插入图片描述
public class test {
	public static void main(String args[]) {
		String a = "hello";
		String b = new String("hello") ;
		String d = new String("hello") ;
		System.out.println(a==b);//false
		b = "hello";
		System.out.println(a==b);  //true
	}
}
  • 常用字符串方法
    在这里插入图片描述
    在这里插入图片描述
4.1.1.2 StringBuffer类
  • 线程安全的可变字符序列
  • 主要操作为append和insert方法
  • 更新方法
StringBuffer s=new StringBuffer("hello");
s.append("java");//添加
s.insert(5"sun");//插入,变为”hellosunjava,5为s字母起始位置)
s.setCharAt(0,'H');//修改,Hellosunjava;
s.delete(5,8);//删除,8之前
String a = s.toString();
4.1.1.3 StringBuilder类

4.1.2 数据类型类

数据类型类基本数据类型
Booleanboolean
Characterchar
Doubledouble
Floatfloat
Integerint
Longlong
String s="1234";
int i=integer.parseInt(s);
String s=Integer.toString(i);

4.1.3 Math类

  • 所有方法和变量都是静态的

4.2 java.util包

4.3 java.io输入输出包

4.3.1 流的概念

类名描述
InputStream字节输入流的超类(抽象类)
OutPutStream字节输出流的超类(抽象类)
Reader字符输入流的超类(抽象类)
Writer字符输出流的超类(抽象类)
File文件类
RandomAccessFile随机访问文件类

4.3.2 标准数据流

  • 程序执行时,系统创建三个流对象:
    System.in System.out System.err 都是字节流
  • 按照ASCII编码标准,标点符号、数字、大小写字母都占一个字节,汉字占2个字节
  • 按照UNICODE标准所有字符都占2个字节
int c=System.in.read();
System.out.println((char) c);//输入’你‘,无法读取完整汉字


InputStreamReader  isr = new Inputstreamreader(System.in);
char c = (char)isr.read();
System.out.println(c);

4.3.3 File类

  • 获取信息/建立/删除/改变**(不支持读写)**
  • 文件与目录都用File类表示,其建立了Java与磁盘文件的联系
  • 常用方法

4.3.4 字节流

4.3.4.1 FileInputStream/FileOutputStream
  • 数据源都是文件
  • 读取字节文件(图像文件),字符或文本文件用FileReader类gbk
4.3.4.3 过滤流FilterInputStream/FilterOutputStream
  • 建立在某个输入输出流之上的流,能在读写同时进行数据处理
FilterInputStream
BufferInputStream
DateInputStream
ObjectInputStream
对象的输入输出
基本数据类型
  • 必须将过滤流与节点流连接,通过在构造方法中指定参数入口(某个节点流对象)
FileInputStream fis==new FileInputStream("text”);
BufferInputstream bis = new BufferInputStream(fis);
  • BufferedInputStream
public BufferedInputStream(InputStream in);
public BufferedInputStream(InputStream in,int size);
//size:缓冲区大小,默认32bytes

4.3.5 字符流

4.3.5.1 FileReader和FileWriter
  • 字符文件输入输出
  • FileReader必须保证文件存在
  • FileWriter若不存在则自动创建
  • 写完后要关闭输出流才能真正写到文件中
4.3.5.2 字符文件输入输出小结:
  • Fil类建立/打开一个文件(实例化对象)
  • FileWriter建立输出输入流
  • 调用方法输入输出
  • 关闭输入输出
4.3.5.3 InputStreamReader
  • 把字节流转换为字符流
  • 参数为字节流,返回字符流

5.多线程

5.1 多线程机制

  • 进程有专有内存空间,内存消耗很大,进程之间通信速度很慢
  • 同一进程的线程之间共享相同内存空间,之间通信速度快
  • 线程必须由进程触发,每个程序运行对应一个进程——主线程
  • ** java.lang.Thread(类)**
  • ** java.lang.Runnable(接口)**

5.2 多线程实现机制

  • 声明一个Thread子类或实现Runnable接口的类,实现run()方法
  • 用构造方法创造对象
  • 调用对象的start()方法,引起run的调用
  • 当使用实现接口的方法时,把该类的对象作为Thread类的构造方法的参数
Thread t1 = new Thread (new myThread(1000,"FAST GUY!
'));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值