javase基础语法总结

1.初识java

通过这一节,我们认识了java是什么以及java的重要性,我们还熟悉了java开发环境的安装、注释等常用知识。我们知道了java之父是詹姆斯·高斯林。

2.数据类型与变量

本节我们学习了八种数据类型,分别为byte、short、int、long、char、float、double、boolean,我们还学习了变量与常量,我们知道变量的取值范围取决于类型。

3.运算符

本节我们学习了算数运算符、关系运算符、逻辑运算符、位运算符、移位运算符以及条件运算符等

4.程序逻辑控制

本节我们学习了逻辑控制,我们知道逻辑控制中有选择和循环,选择中有switch和if,其中不能被switch修饰的有float、double、long、boolean。if中的条件必须为boolean类型的。循环又分为while、for与do while循环。最后,我们还学习了输入输出

while(sc.hasNextInt){
   int tmp = sc.nextInt();
   sum += tmp;
   num++;
}   

5.方法

本节我们学习了方法的定义、方法的传参、方法的返回值、方法的重载、方法的递归。我们知道方法是由返回值 方法名 形式参数列表 {方法体}构成关于方法的重载我们知道首先方法的名字一样,方法的参数列表不同(方法的个数,顺序,数据类型),返回值不影响方法重载。
方法的递归主要分为以下几点:
1.趋近于终止的条件
2.调用自己本身
3.找到递推公式

6.数组

本节我们学习了数组的定义,了解了内存布局,数组的访问,常见的错误,数组作为参数进行传递和数组作为返回值,数组常见的方法都在Array这个类当中,二维数组

1.定义的方式
int[] array1 = {0,1,2,3,4,5,6,7,8,9};
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
int[] array = new int[10];

注意:

 //int[] array3;
// array3 = {1, 2, 3};

上述代码是错误的,省略格式不可以拆分, 否则编译失败
正确写法:

int[] array1;
array1 = new int[10];
int[] array2;
array2 = new int[]{10, 20, 30};
2.JVM中的5块内存:

虚拟机栈,本地方法栈,方法区,堆,程序计数器

3.数组的访问

注意长度和下标,不能够越界访问,也不能造成空指针异常

4.二维数组

注意:二维数组实际上就是一种特殊的一维数组。

7.类和对象

1.类是什么?怎么定义?

首先类是用来描述一个对象的。
类的定义:

// 创建类
class ClassName{ 
  field;    // 字段(属性) 或者 成员变量
  method;    // 行为 或者 成员方法
}

类中包含了字段(属性/成员变量)和成员方法(方法)
如果是普通的成员变量,需要通过对象的引用去访问,如果是静态的成员变量,需要通过类名进行访问。
同理,成员方法也是一样。

2.对象

对象是通过new关键字来进行实例化的,可以实例化多个对象。
对象当中有定义好的普通的成员变量,可以通过对象的引用来访问对象中的成员变量。

3.this引用

this是指当前对象的引用
我们可以通过this:
(1)访问自己的成员变量
(2)访问自己的成员方法
(3)调用自己的构造方法
谁调用某个方法,谁就是this

4.构造方法

方法名和类名相同,没有返回值,可以有多个,也就意味着构造方法可以发生方法的重载.
(1)当实例化一个对象的同时会调用构造方法
(2)如果用户没有自己定义一个构造方法,那么编译器会自己默认生成一个不带参数的构造方法。
注意:一旦用户自己定义了,编译器便不再生成

5.初始化

(1)默认初始化:没有进行初始化时,不同类型都有一个默认值。
在这里插入图片描述

(2)就地初始化:定义成员变量的时候,直接进行初始化

6.封装

主要用来隐藏内部的实现细节,通过公开的方法来操作这些数据,在实现上,是采用private关键字来修饰成员变量或者是成员方法,体现了类的安全性。
(1)我们可以通过set和get方法来实现
(2)访问修饰限定符的使用范围
在这里插入图片描述
(3)包:为了更好的管理类,把多个类收集到一起
包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式

7.static

首先static不依赖于对象,他是通过类名进行访问,定义的成员变量是存在方法区的,且只有一份,所有对象所共享的。
静态成员变量初始化分为就地初始化和静态代码块初始化

8.代码块

(1)普通代码块:定义在方法内部的代码块(比较少见)
(2)实例代码块(构造代码块):一般用于初始化实例成员变量
(3)静态代码块:一般用于初始化静态成员变量
注意事项
静态代码块不管生成多少个对象,其只会执行一次
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
实例代码块只有在创建对象时才会执行
他们的执行顺序为静态的(只执行一次),实例,构造方法

9.内部类

(1)静态内部类:
注意:在静态内部类当中不能直接访问外部类的非静态成员变量,因为外部类的成员变量依赖外部类对象,需要通过外部类对象的引用来进行访问。
(2)实例内部类:
【注意事项】

  1. 外部类中的任何成员都可以在实例内部类方法中直接访问
  2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
  3. 在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问
  4. 实例内部类对象必须在先有外部类对象前提下才能创建
  5. 实例内部类的非静态方法中包含了一个指向外部类对象的引用
  6. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。
    (3)匿名内部类:
    匿名对象:如果以后的场景是使用一次对象,就可以使用匿名对象。

8.继承和多态

继承:即对共性的抽取,这样可以达到代码的复用。可以看做是is-a。

1.继承需要借助关键词extends

A extends B
A:子类(派生类)
B:父类(基类/超类)

2.成员访问

在子类方法中 或者 通过子类对象访问成员时:
1.如果访问的成员变量子类中有,优先访问自己的成员变量。
2.如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
3.如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

3.super关键字

1.super访问父类的成员变量
2.super访问父类的成员方法
3.super访问父类的构造方法
注意:当子类继承父类之后,需要先帮助父类的成员进行初始化,子类当中显示调用父类的构造方法

4.super和this

相同点:

  1. 都是Java中的关键字
  2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
  3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

不同点:
4. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用。
2. 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
5. 在构造方法中:this(…)用于调用本类构造方法,super(…)用于调用父类构造方法,两种调用不能同时在构造方法中出现
6. 构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,但是this(…)用户不写则没有

5.继承关系的执行顺序

父类的静态,子类的静态,父类的实例,父类的构造,子类的实例,子类的构造。

如果一个类不想被继承,可以把这个类用final修饰,说明这个类不能被继承。
java中不支持多继承。

6.组合与继承

继承表示对象之间是is-a的关系,而组合表示对象之间是has-a的关系。

7.多态

多态就是具体完成某个行为时,不同对象会产生不同的状态。
1.向上转型与向下转型
向上转型:父类引用子类对象

Animal animal = new Cat

使用场景:(1)直接赋值;(2)通过传参;(3)通过返回值
向下转型:不安全,

Cat cat =Cat) animal;

因为不是所有的动物都是猫,需要配合instanceof一起使用,并且需要进行强制类型转换

2.静态绑定与动态绑定
静态绑定是指在编译的时候就进行了绑定,比如:重载
动态绑定是指在编译时不确定方法的行为,需要等到程序运行时才能具体确定调用那个类的构造方法

3.重写与重载
重写:
(1)方法名相同
(2)形式参数列表都要一样
(3)返回值也要相同
重载:
(1)方法名相同
(2)形式参数列表不同(个数,顺序,数据类型)
(3)返回值不影响

8.多态的实现条件

1、必须在继承体系下
2、子类必须对父类进行重写
3、通过父类引用调用子类重写的方法
注意:
1.不能重写被private,static,final修饰的方法
2.重写父类的方法时,子类的访问权限要大于或者等于父类的访问权限

9.抽象类和接口

1、抽象类:

如果一个类中没有包含足够的信息来描绘一个具体的对象,可以把这个类定义为抽象类
(1)包含抽象方法:被abstract修饰,表示这个方法没有具体的实现
(2)包含抽象方法后,这个类也必须由abstract修饰
(3)抽象方法不能被实例化,存在构造方法,因为可以被子类继承,调用这个构造方法初始化抽象类的成员
(4)只能被继承,所以继承之后,需要重写抽象类当中的抽象方法,除非这个子类是抽象类

2.接口

1.接口:可以看做是多个类的公共规范,是一种引用数据类型被interface修饰
(1)接口也不能被实例化
(2)类和接口的关系是interface A,B,C,D
(3)一旦实现了某个接口,就得重写接口当中的所有成员方法
(4)接口当中的成员变量默认被public static final修饰,成员方法默认被public abstract修饰。
(5)接口和接口之间可以使用关键字extends,表示某个接口拓展了某个接口的功能。
interrface A extends B,C,D{}
(6)抽象类和接口都是可以发生向上转型的

2.几个重要的接口:Compareable,Comparator,Cloneable

3.Object类
所有类的的父类,包含了一些一些重要的方法

4.抽象类和接口的区别
(1)抽象类当中可以包含和普通类一样的成员变量和成员方法,但是在接口中成员变量只能是public static final的,成员方法只能是public abstract的
(2)一个类只能继承一个抽象类,但是可以同时实现多个接口,所以解决类了java中不能进行多继承的特性

10.认识string类

本节主要讲了类的常用方法以及内存的大概表现形式。

String StringBuilder StringBuffer

1.拼接的时候建议使用后两个
2.StriingBuilder是线程不安全的
3.StringBuffer是线程安全的,但不涉及线程安全时,可能会有效率的问题。

11.异常

1.程序自己抛出的异常

(1)可以自己处理异常
(2)throws 声明异常
(3)throw抛出异常
(4)try catch finally 处理异常
注意:final一定会被执行,catch会捕获具体的异常

2.自定义的异常

(1)继承Exception默认当前自定义的异常是受查异常
(2)继承RuntimeException默认当前异常是非受查异常

我们需要学会看懂异常,并且自己尝试处理异常

以上就是全部java语法部分的重点内容,如果觉得写得好的话,点赞!收藏!加关注!,如果有写得不好的地方,欢迎各位大佬指教。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值