JAVA基础知识点(个人复习总结)

1、常用名词

关键字包括:this、super、final  static  abstact  implement
修饰符分别为:public、protectd、default、private
基本数据类型8 个 :byte、short、int、long、float、double、char、boolean
引用数据类型:String、类、数组、接口

2、final:用于修饰类、属性和方法;

被final修饰的类不可以被继承
被final修饰的方法不可以被重写
被final修饰的变量不可以被改变,
被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的 

3、static:静态,它是一个修饰符,用于修饰成员(成员变量,成员方法)

随着类的加载而加载,静态先于对象存在,被所有的对象共享,可以直接被类名调用,也可以被对象调用。
①静态方法只能访问静态成员(属性和方法),不能访问非静态成员。因为静态在的时候非静态的还没在呢
②非静态方法可以访问静态成员,也可以访问非静态成员
③因为静态先于对象的存在而存在,所以静态方法中不可以出现this、super关键字。 

4、面向对象三大特征:封装、继承、多态

5、封装:

【特点】①可以对成员进行更精确的控制 ②隐藏信息,实现细节 ③减少耦合
【如何实现封装】通过权限控制对封装好的类加上权限,4中修饰符分别为public、protectd、default、private
访问权限      本类    本包   子类        其他包    
public           ∨         ∨         ∨              ∨    
protect         ∨         ∨         ∨               ×    
default         ∨         ∨         ×                ×    
private         ∨         ×         ×                 × 

6、继承 :class 子类名 extends 父类名{}

 【特点】
①一个子类只能有一个父类,一个父可以有多个子类。单继承。
②提高了代码的复用性。
③子类可以直接访问父类中的非私有的属性和方法。(注意private私有属性不可以访问)
④子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
⑤子类可以用自己的方式实现父类的方法。(重写)
⑥继承使用关键字extends来表示继承关系。

7、多态:实现多态有三个必要条件:继承、重写、向上转型。

8、重写:

①发生在父子类中,(重点)
②方法名、参数列表必须相同,
③访问修饰符大于等于父类(里氏代换原则);
④如果父类方法访问修饰符为private则子类中就不是重写。

9、重载:

①发生在同一个类中,(重点)
②方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),
③与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分

10、成员变量、局部变量、静态变量、实例变量

成员变量:方法外部,类内部定义的变量
局部变量:类的方法中的变量。
静态变量: static变量也称作静态变量,静态变量由于不属于任何实例对象,属于类的,也叫类变量
实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。

11、构造函数

【特点】
①构造方法名称必须与类名一致
②构造方法不具有任何返回值典型,即没有返回值,关键字 void 也不能加入,加入后就不是构造方法了,就成了普进的方法了
③任何类都有构造方法,如果没有显示的定义,则系统会为该类定义一个默认的构造器,这个构造器不含任何参数。如果显示的定义了构造器,系统就不会创建默认的不含参数的构造器了。
【语法结构】
[修饰符列表] 构造方法名(形式参数列表) {
    构造方法体;
}

12、抽象类与接口的区别

【抽象类】
①抽象类使用abstract关键字声明
②子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现
③抽象类可以有构造器
④抽象类中的方法可以是任意访问修饰符
⑤一个类最多只能继承一个抽象类
⑥抽象类的字段声明可以是任意的
  注意:
(1)抽象类不能使用 final 修饰;定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承
(2)普通类和抽象类的区别区别:
        ①普通类不能包含抽象方法,抽象类可以包含抽象方法。
        ②抽象类不能直接实例化,普通类可以直接实例化。

【接口】
①接口使用interface关键字声明
②子类使用implements关键字来实现接口。它需要提供接口中所有声明的方法的实现
③接口不能有构造器
④接口中的方法为 public abstract;变量为 public static final
⑤一个类可以实现多个接口

13、== 和 equals 的区别

①== : 它的作用是判断两个对象的地址是不是相等。基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址
②equals() : 它的作用也是判断两个对象是否相等
public class test1 {
    public static void main(String[] args) {
        String a = new String("ab"); // a 为一个引用
        String b = new String("ab"); // b为另一个引用,对象的内容一样
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 从常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false,非同一对象
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}


14、值传递

【例2】
 public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        System.out.println(arr[0]);
        change(arr);
        System.out.println(arr[0]);
    }

    public static void change(int[] array) {
        // 将数组的第一个元素变为0
        array[0] = 0;
    }
结果:1   0
原因:array 被初始化 arr 的拷贝也就是一个对象的引用,也就是说 array 和 arr 指向的时同一个数组对象。
因此,外部对引用对象的改变会反映到所对应的对象上。

【例3】
public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student s1 = new Student("小张");
        Student s2 = new Student("小李");
        Test.swap(s1, s2);
        System.out.println("s1:" + s1.getName());
        System.out.println("s2:" + s2.getName());
    }

    public static void swap(Student x, Student y) {
        Student temp = x;
        x = y;
        y = temp;
        System.out.println("x:" + x.getName());
        System.out.println("y:" + y.getName());
    }
}
结果:x:小李 y:小张 s1:小张 s2:小李
原因:方法并没有改变存储在变量 s1 和 s2 中的对象引用。
swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝

15、String不可变但不代表引用不可以变

String str = "Hello";
str = str + " World";
System.out.println("str=" + str);

结果:str=Hello World

16、ArrayList和LinkedList的区别

ArrayList基于数组的数据机构,LinkedList是基于链表的数据结构,所以有以下几种特性:
①对于随机查询,ArrayList比LinkedList快
②对于插入或者删除,LinkedList由于是链表,所以是比ArrayList性能更好。

未完待续~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值