java查漏补缺(基础篇)

Ⅰ:基础篇

1:java的发布

java发布晚于C++,在许多内容上十分接近C++;

2:java的就业方向

  • Web开发
  • Android开发
  • 客户端开发
  • 嵌入式应用

3:java跨平台性

源代码在编译后变成后缀名为 .class 的文件,然后通过 java虚拟机(JVM) 作为媒介,在不同的平台上运行;因此作为"红娘"的 JVM 是不能跨平台的而 .class 是可以跨平台的;

4:java的版本

  • J2SE(Java SE) 标准版(Java学习入口)
  • 主要用于开发客户端J2EE(Java EE) 企业版
  • 功能最丰富,常用于web开发与庞大的管理软件,符合企业的需求J2ME(Java ME) 微型版(Java的初衷)
  • 主要用于嵌入式和移动开发

5:导入java类文件

  • import 包名.类名 //导入具体包中的具体类
  • import 包名.* //导入具体包中的全部类

6:不同进制的表示方法

  • 二进制:0b
  • 八进制:0
  • 十六进制:0x
  • 例如:011 就是八进制的11,相当于十进制的9;123_456_789 也表示123456789,java编译器会删除下划线,但是增加的代码的可读性

7:数据类型的转换

  • 自动类型转换
    从左往右,逐渐转换byte,short,char-int-long-float-double
  • 强制类型转换
    在数据前加括号,括号里写上目标类型;如:(int)3.14 ,转换后变成3;

8:运算符

int b = 10 ; int a = b++; //此时a = 10;b = 11;
a = ++b; //此时a = 11;b = 11;

9:大量数据下StringBuffer类与StringBuider类 对 Sting类的强势碾压

StringBuffer
该类的方法侧重于对字符串进行操作,在对大量字符串进行操作时优势明显,多线程安全
  • 声明方法: new StringBuffer()//分配16字节长度的缓冲区 或 new StringBuffer(num)//分配num字节长度的缓冲区 方法:
  • append(内容) //往当前字符串后添加内容
  • deleteCharAt(num) //删除字符串中指定num下标的字符;也可以用(num1,num2)删除[num1,num2)之间的字符
  • insert(num,"内容") //在指定位置添加内容
  • setCharAt(num,'另一个字符') //把指定的下标的字符替换成另一个字符
StringBuilder
与StringBuffer类似,但速度相对来说更快,但是线程不安全,建议在单线程下使用

10:java中创建对象时的运行顺序

  1. 从main方法作为入口
  2. 在遇到new时执行类的构造方法的签名
  3. 初始化类的属性
  4. 执行构造方法的代码块
  5. 回到main方法中的下一行

11:包装类

基本数据类型与对应的包装类 byte -- Byte short -- Short int -- Integer long -- Long char -- Character float -- Float double -- Double boolean -- Boolean
装箱与拆箱 int num = 10; Integer n = new Integer(num); //将基本数据类型变为包装类称作装箱; int m = n; //将包装类变成基本数据类型称为拆箱;

12:源文件

  • 只能有一个public类,可以有多个非public类
  • 定义在某个包中时,package语句在首行
  • import语句在package之后,在类定义之前
  • package与import对源文件中的所有类都有效

13:package包

层级表示 目录的层级表示: '/' 例:D:/Java 包中的层级表示: '.' 例:pack.pac1.Test 相当于目录中的/pack/pac1/Test.class
包的调用 用new关键字调用时,需要在方法前添加完整的包名
例如:java.util.Date day = new java.util.Date() ; // 通过import引入包中的类,使用'*'可以引入具体包中所有的类
访问权限 public : 公共的 private : 只能在本类中使用 无修饰符 : 只能在本包中的类访问

14:继承

类继承 extends关键字 子类可以调用父类的属性 子类可以重写(覆写)父类的方法 构造方法不能被继承
super关键字 与this关键字类似,this表示当前类的实例,super表示父类 super.方法名() 可以调用父类中的方法 构造方法中可以用 "super(参数);" 来调用父类的构造方法;如果编写子类的一个构造方法而未用super,编译器会自动插入一个不带参数的调用父类构造方法的方法;
方法的覆盖 覆盖父类方法的返回类型,方法名称,参数列表必须与原方法相同; 被覆盖方法不能有 final,private,static 关键字

15:多态

三个必要条件 存在继承 存在重写 父类变量引用子类实例
多态的本质
假设:
  People student = new Student();
  student.func(num);
  1. 编译器会列举出Student类中所有的func方法和父类 Peoole中访问修饰符为 public 的 func方法
  2. 重载解析:通过传入的参数类型与数量对方法进行筛选,挑选出满足传入参数标准的方法;如果没有找到,会进行自动类型转换后继续查找,如果依旧无法匹配,报错
  3. 通过静态绑定或动态绑定对找到确切的方法(动态绑定,静态绑定)
But:为了增加速度,JVM提前为每一个类都创建了一个方法表,便于查找,增加了调用时的速度;
instanceof运算符 可以判断一个变量所引用的对象的实际类型,但它表示的是引用的对象的类型,并不是变量自身的类型 所有的对象 instanceof Object 时,都会返回true 当前对象 instanceof 当前类/父类 时,会返回true
多态对象的类型转换 向上转型是子类转成父类;向下转型是父类转成子类; 向上转型:通常用到的父类变量,子类对象,这个过程就是向上转型 向下转型:有时为了调用子类的功能,完成父类没有办法做到的事情,我们就需要向下转型;但是向下转型不能直接父类对象强制类型转换成子类,必须先向上转型,然后强制类型转换成子类因为不正常的向下转型会通过编译,但是会运行失败,因此需要通过 instanceof 运算符进行判断,如果父类是子类的实例(向上转型),那么可以转换成子类,否则不可以执行转换;

16:静态

static关键字与静态方法 static在类被装载时会被初始化,并且共享这块内存 静态方法只能访问静态变量 静态方法也可以通过对象来访问,但会爆出警告静态方法不能被非静态方法覆盖构造方法无法声明为static局部变量不能声明成static静态方法中不存在当前对象,因此不能使用this关键字与super关键字
静态初始器与导入 静态初始器: static{ 代码 } //在类装载(第一次使用)时执行一次,可以初始化静态变量 静态导入:导入静态类或静态方法,用: import static XXX 来导入静态类/方法,在使用导入的方法时也可以直接使用方法名调用;

17:final关键字

final修饰后的特点 类:不能继承 方法:不能覆写变量:成为常量,只能赋值一次,变量名称按照惯例全部大写
其他知识点 static 与 private 修饰过的方法会被隐式声明为 final 因为final修饰的方法为静态绑定,因此不会产生多态,在程序运行时可以提高效率,但经过优化的JVM在内联等方面依旧存在优势

18:Object类

特点 定义java类时名有明确的继承,则会默认extends Object; 除了基本类型外,其他的(包括基本类型数组)都是对象,继承Object类;
方法 equals() //判断一个对象是否等价于另一个对象,只能比较引用类型 hashCode() //两个对象相同,则他们的hashCode值相同;但两个hashCode值相同的对象不一定是相同的对象;toString() //默认下会返回当前对象的类型和内存地址,可以在类中进行覆写来得到更加有用的信息

你可能感兴趣的:(java)