java基础

java基础

大学期间学过java,但是很多内容都忘记了,重新学习了一遍并将之前掌握得不好的部分总结下来。

1.编译型和解释型

编译型: 将源代码一次性编译成可执行文件,不需要每次执行时重新编译。
解释型: 每次执行时都需要对源代码进行逐行解释。
java是两者结合。

2.进制

八进制数字前加0
十六进制数字前加1x

3. 类型转换

byte,short,char->int->long->float->double
强制转换:(类型)变量名 高->低
自动转换: 低->高
注:
1.不能对布尔值进行转换。
2.不能把对象类型转换为不相干的类型。
3.转换的时候可能存在内存溢出,或者精度问题。

4.变量和常量

类变量: 声明前static,从属于类,可以在类中直接使用。
实例变量: 从属于对象,需要new一个新的对象才能使用;布尔值的默认值是false。
局部变量: 从属于方法,必须声明和初始化值。
常量:初始化后不能再改变的值;用final关键词定义。

5.字符串连接符

int a=1;
int b=2;
System.out.println(""+a+b); //输出12("“在前,自动转换为字符串型。)
System.out.println(a+b+”"); //输出3(""在后,前面依旧进行运算。)

快捷键

ctrl+d复制改行到下一行
alt+enter自动补全
windows+table切换页面

6.包机制

一般利用公司域名倒置作为包名。

7.JavaDoc生成文档

/**+enter

8.Scanner对象

基本语法: Scanner s = new Scanner(System.in);

通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。

scanner.close();//凡是属于IO流的类型如果不关闭会一直占用资源

next()以空格作为分隔符
nextLine()以回车作为分隔符

9.循环

do while()先执行后判断,循环至少会执行一次。

10.命令行传参

在命令行运行class文件,需要找到包的路径,否则无法运行。

11.可变参数

1.JDK1.5开始,Java支持传递同类型的可变参数给一个办法。
2.在方法声明中,在指定参数类型后加一个省略号(…)。
3.一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

12.内存分析

1.堆:存放new的对象和数组;
可以被所有的线程共享,不会存放别的对象引用。
2.栈:存放基本变量类型(会包含这个基本类型的具体数值);
引用对象的变量(会存放这个引用在堆里面的具体地址)。
3.方法区:可以被所有的线程共享;包含了所有的class和static变量。
4.数组本身就是对象,数组元素相当于对象的成员变量。Java中方对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

13.Arrays类

包含用于操作数组的各种方法(排序和搜索),该类还包含一个静态工厂,可以将数组视为列表。
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”(不是“不能”)使用对象来调用。
1.Arrays.toString(int[] a):打印数组;
2.Arrays.sort(int[] a):升序排序;
3.Arrays.fill(int[] a, int val):将数组中每个元素都赋值为val;
4.Arrays.equals(int[] a, int[] a2):并比较数组中元素值是否相等。

14.面向对象

Alt+Insert:生成构造器/get set方法
Ctrl+H:查看继承结构树

基础

1.面向对象的本质就是:以类的方式组织代码,以对象的形式组织(封装)数据。
2.三大特性:封装、继承、多态。
3.静态方法可以直接通过类名.方法名调用;非静态方法需要实例化(对象类型 对象名=对象值)后才能调用。
4.静态方法是和类一起加载的;非静态方法是类实例化之后才存在的,所以静态方法不能调用非静态方法,反之可以。
5.java只有值传递。
6.一旦定义了有参构造,无参就必须显示定义。(快捷键:alt+insert生成构造器)
7.引用类型:对象是通过引用来操作的:栈–>堆。
8.程序设计要追求“高内聚,低耦合”。高内聚:类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

继承

1.在java中,所有的类都默认直接或间接继承object类;java中只有单继承,没有多继承。
2.super注意点:

  • super调用父类的构造方法,必须在构造方法的第一个

  • super必须只能出现在子类的方法或者构造方法中

  • super和this不能同时调用构造方法
    VS this:

  • 代表的对象不同:
    this:本身调用者这个对象
    super:代表父类对象的应用

  • 前提
    this:没有继承也可以使用
    super:只能在继承条件下才可以使用

  • 构造方法
    this():本类的构造
    super():父类的构造

重写

需要有继承关系,子类重写父类的方法;
1.方法名和参数列表必须相同,方法体不同;
2.修饰符:范围可以扩大 public>protected>Default>private;
3.抛出的异常:范围可以被缩小,但不能扩大。

多态

同一方法可以根据发送对象的不同而采取多种不同的行为方式
1.一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类);
2.多态是方法的多态,属性没有多态;
3.父类和子类,有联系;(类型转换异常:ClassCastException)
4.存在条件:继承关系,方法需要重写,父类引用指向子类对象(father f1 = new Son());
5.不能重写的方法:

  • static方法:属于类,不属于实例
  • final:常量
  • private方法:私有,不能重写
    6.如果是父类指向子类的引用,父类中定义了方法而子类中没有定义,则使用父类中的方法;父类子类同时定义,则使用子类中的方法;只有子类中定义,无法使用。
    7.访问成员变量的两种方式:
  • 直接通过对象名称访问成员变量:看等号左边是谁,则优先用谁,没有则向上找。
  • 间接通过成员方法访问成员变量。

成员变量:编译看左边,运行还看左边
成员方法:编译看左边,运行看右边

类型转换

1.父类引用指向子类的对象;
2.把子类转换为父类,向上转型;
格式: 父类名称 对象名 = new 子类名称();
含义: 右侧创建一个子类对象,把它当作父类来看待使用;
注意事项: 向上转型一定是安全的,从小范围转向更大范围。

3.把父类转换为子类,向下转型:强制转换。
格式: 子类名称 对象名=(子类名称)父类对象
**含义:**将父类对象,【还原】成为本来的子类对象。
注意事项:

  • 必须保证对象本来创建的时候就是猫(假设动物是父类,猫狗是子类),才能向下转型成为猫。
  • 如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错。
  • 如何知道一个父类引用的对象,本来是什么子类?
    格式:
    对象 instanceof 类名称
    这将会得到一个boolean值,判断前面的对象能不能当作后面类型的实例。

static

1.静态方法是和类一起加载的;非静态方法是类实例化之后才存在的,所以静态方法不能调用非静态方法,反之可以。
2.static可用于静态导入包
3.被final修饰的类不能被继承

抽象类

1.抽象类的所有方法,继承了它的子类,都必须要实现它的方法,除非这个子类也是抽象类;
2.不能new这个抽象类,只能靠子类去实现它;
3.抽象类中可以写普通的方法;抽象方法必须在抽象类中;
4.抽象类中可以有构造方法。

接口

1.定义一些方法,让不同的人实现;
2.implements可以实现多个接口;
3.接口中的属性默认为常量public static final;方法默认为public abstract;
4.接口不能被实例化,接口中没有构造方法;
5.必须要重写接口中的方法。

匿名对象

1.只有右边的对象,没有左边的名字和赋值运算符;
2.匿名对象只能使用唯一的依次,下次用需要重新创建新对象。

15.异常

选中代码 用Ctrl+Alt+T可以自动补全异常代码块
1.五个关键字:try、catch、finally、throw、throws;
2.try/catch必须要有,finally可以没有(一般用于IO流,关闭操作);
3.在多重catch块后面,可以加一个catch(Exception)来出合理可能会被遗漏的异常;

16. IO

16.1 基本信息

1.输入:将硬盘中的数据读取到内存中使用
2.输出:将内存中的数据写到硬盘中保存
3.数据流分为字节流和字符流

16.2 字节流

1.字节输出流OutPutStream:抽象类,所有字节输出类的超类

  • FileOutputStream:把内存中的数据写入到硬盘的文件中
  • 写入数据的原理:java程序->JVM->OS->OS调用写数据的方法,把数据写入文件中。
    2.字节输入流InputStream:抽象类,所有字节输入类的超类
  • FileInputStream:吧硬盘文件中的数据,读取到内存中使用
  • 读取数据的原理:java程序->JVM->OS->OS读取数据的方法->读取文件

16.3 序列化与反序列化

1.把对象以流的方式,写入到文件中保存,叫写对象,也叫对象的序列化。
2.把文件中保存的对象,以流的方式读取出来,叫做读对象,也叫对象的反序列化。
3.类通过实现Serializable接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值