JAVA基础复习

1 Java简介


特性

  • 丢弃了C++中很少使用的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。Java语言不使用指针,而是引用。并提供了自动的废料收集。

  • 类之间单继承(一个子类只能有一个直接父类)、支持接口之间的多继承(一个子类可以有多个直接父类)

  • 支持动态绑定(出现多态、方法覆盖、方法重载时,根据对象的声明类型不能确实调用方法的位置,必须根据对象在堆中实际创建的对象类型来确定方法所在的位置。即,在程序运行过程中通过动态创建对象的方法表来定位方法的方式,叫动态绑定机制。类对象方法的调用必须在运行过程中采用动态绑定机制。)

    静态绑定:在编译器阶段就已经指明了调用方法在常量池中的符号引用,JVM运行的时候只需要进行一次常量池解析即可(在编译阶段就能确定调用哪个方法的方式。在编译阶段就将要调用的方法的直接地址记录到常量池中,JVM能够确定调用的方法在内存的位置。)
    被static修饰的静态方法、被private修饰的私有方法、被final修饰的禁止子类覆盖的方法都会被编译成invokestatic指令。所有类的初始化方法和会被编译成invokespecial指令。JVM采用静态绑定机制来调用这些方法。

  • 健壮性:强类型机制、异常处理、垃圾的自动收集、安全检查机制

  • 体系结构中立、可移植:Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

  • 可解释型的:Java程序在Java平台上被编译为字节码格式,可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在链接阶段被载入到运行环境中。

  • 多线程的:Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

2 语法规范


命名规范

  • 项目名全部小写、源文件名必须和类名相同
  • 包名全部小写
  • 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。
    public class MyFirstClass{}
    
  • 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。
    int index=0;
    public void toString(){}
    
  • 常量名全部大写
    public static final String GAME_COLOR=”RED”;
    
  • 所有命名规则必须遵循以下规则:

    名称只能由字母、数字、下划线、$符号组成
    不能以数字开头
    名称不能使用JAVA中的关键字。
    坚决不允许出现中文及拼音命名。

3 基础语法


  • 当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

3.1 基本数据类型

内置数据类型
  • byte(8bit)、short(16bit)、int(32bit)、long(64bit)、float(32bit)、double(64bit)、boolean、char(16bit)
  • 包装类的属性:SIZE、MAX_VALUE、MIN_VALUE
引用类型
  • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、User等。变量一旦声明后,类型就不能被改变了。
  • 对象、数组属于引用数据类型。
常量
  • final关键字修饰常量
    final double PI = 3.1415926;
    
自动类型转换
  • 转换从低级到高级 byte,short,char ——> int——> long ——> float ——> double

    不能对boolean类型进行类型转换。
    不能把对象类型转换成不相关类的对象。
    在把容量大的类型转换为容量小的类型时必须使用强制类型转换(浮点数—>整数要舍弃小数)
    转换过程中可能导致溢出或损失精度。
    整数默认类型是int。

3.2 变量

  • 类变量:独立于方法之外的变量,用 static 修饰。

    也称静态变量,存储在静态存储区。
    经常被声明为常量,很少单独使用static,初始化后不可改变。
    大多数声明为public(public static final 时,变量名大写)
    在第一次被访问时创建,在程序结束时销毁。
    可以通过ClassName.VariableName访问。

  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。

    在对象被创建时创建,对象被销毁时销毁。有默认值。应该至少被一个方法、构造方法、语句块引用,使外部可获得实例变量信息。

  • 局部变量:类的方法中的变量。

    分配在栈上,当方法被执行时创建,执行完成后销毁。没有默认值,声明后要初始化。

3.3 修饰符

访问控制修饰符

访问权限

  • 父类中声明为private的方法,不能被继承
非访问修饰符
  • static 修饰符:用来修饰类方法和类变量。

    局部变量不能声明为static。
    静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

  • final 修饰符:用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

    final方法,为了防止该方法内容被修改。

  • abstract 修饰符,用来创建抽象类和抽象方法。

    抽象类不能实例化对象,抽象类的作用是为了将来对该类进行扩充。
    类不能同时被abstract和final修饰。
    如果类中有抽象方法(没有实现的方法,由子类实现),则一定要声明为抽象类;抽象类中可以有抽象或非抽象方法。
    继承抽象类的子类必须实现父类所有抽象方法,除非子类也是抽象类。

  • synchronized 和 volatile 修饰符,主要用于线程的编程。

    synchronized 关键字声明的方法同一时间只能被一个线程访问。
    volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个 volatile 对象引用可能是 null。

  • transient 修饰符:用来标识一个成员变量在序列化子系统中应被忽略,不需要被序列化。

3.4 运算符

  • 算术运算符:+ - * / % ++ --
  • 关系运算符:== != > < >= <=
  • 位运算符:|或 &并 ^异或 ~反码
  • 逻辑运算符:&& || !
  • 赋值运算符:+= -= *= /= %=
  • 其他:条件运算符 ? : instanceof运算符 实例 instanceof 类型 (实力是否属于该类型)

3.5 if/switch语句

  • if…else…语句
    if(布尔表达式){
    ...}
    else{
    ...}
    
  • switch语句
    switch(表达式){
    	case value:
    		//语句
    		break;   //如果没有break,程序继续执行下一个case,直到出现break
    	default :
    		//语句
    }
    

3.6 循环结构

  • while循环;do…while循环
    while( 布尔表达式 ) {
    	//循环内容
    }
    
    do {
       //代码语句
    } while(布尔表达式);
    
  • for循环
    for(初始化; 布尔表达式; 更新) {
    	//代码语句
    }
    
  • 增强for循环(Java5引入,主要用于数组)
    for(声明语句 : 表达式) {
    	//代码句子
    }
    

3.7 数组

  • 声明:Array[] array;
    Array array[]; //C/C++中使用,java也能用
  • 创建:Array[] array = new array[arraySize];
  • Arrays类:java.util.Arrays类包含操作数组的方法,都是静态的。

    public static void fill(int[] a, int val) 赋值
    public static void sort(Object[] a) 排序

3.8 方法

  • System.out.println(): 系统类System中的标准输出对象out中的方法println()。

  • 当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。

  • 方法的参数是局部变量

  • 构造方法:当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。(java中有默认构造方法)

  • 可变参数:在方法声明中,在指定参数类型后加一个省略号(…) 。

    一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。jdk 1.5后支持。
    public void printMax( double... numbers) //numbers数量可变

  • finalize() 方法:在对象被垃圾收集器析构(回收)之前调用,它用来清除回收对象。在 finalize() 方法里指定在对象销毁时候要执行的操作。

    Java 的内存回收可以由 JVM 来自动完成。如果你手动使用,则可以使用上面的方法。

3.9 Scanner类

  • 获取用户输入:Scanner s = new Scanner(System.in);

    next(),nextLine()方法获取输入;
    hasNext(),hasNextLine()判断是否还有输入;

  • next():

    1、一定要读取到有效字符后才可以结束输入。
    2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
    3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
    4、next() 不能得到带有空格的字符串。

  • nextLine():

    1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
    2、可以获得空白。

【参考文档】https://www.nowcoder.com/tutorial/10001/3ee2166743c941b3a80b948614997f74

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值