【零基础 快速学Java】韩顺平 零基础30天学会Java 笔记
IDEA
IDE(集成开发环境)
设置一些快捷键吧
ctrl+d | 删除 |
---|---|
alt+\ | 补全代码 |
ctrl+alt+向下光标 | 复制 |
alt+\ | 补全代码 |
ctrl+\ | 注释 |
alt+insert | 生成构造器 |
ctrl+H | 学习继承 |
ctrl+B | 可以选择定位到哪个类的方法 |
在后面加.var | 自动分配变量名 |
file->setting->editor->Live templates
查看有哪些模板快捷键/可以自己增加模板|
1. 包
语法
package com.hspedu
1.package 关键字表示打包
2.com.hspedu:表示包名
本质:创建不同的文件夹来保存 类文件 ,
常用的包
java.lang.* //lang包是基本包,默认引入,无需再引入
java.util.*//util包,系统提供的工具包,工具类,使用Scanner
java.net.*//网络包,网络开发
java.awt.*//java界面开发,GUI
2. 访问修饰符
只有默认的和public才能修饰类
3. 封装(encapsulation)
封装encapsulation就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只能通过被授权的操作【方法】,才能对数据进行操作。
好处:
1.隐藏细节 :方法(连接数据库)<————调用(传入参数)
2.可以对数据进行验证,保证安全合理
实现:
- 将属性进行私有化
- 提供一个公共的set方法,用于对属性判断并赋值
public void setXXX(类型 参数名){ //加入数据验证的业务逻辑 属性=参数名; }
- 提供一个公共的get方法,用于获取属性的值
public XX getXXX(类型 参数名){
//权限判断
return xx;
}
alt+insert快捷键进入Generate 然后选择Getter and Setter快速构建
java封装与构造器
如何避免通过构造器绕过验证?
在构造器中使用setXXX()
4. 继承
1.子类继承了所以的属性和方法,但是私有属性和方法不能在子类直接访问,要通过公共的方法访问
2.子类必须调用父类的构造器,完成父类的初始化
3.当创建子类对象的时候,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作。否则编译不会通过。
4.如果希望指定去调用父类的某个构造器,则显示的调用一下:super(参数列表)
5.super在使用时,必须放在构造器第一行(super只能在构造器中使用)
6.super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器(this()用于调用本类的构造器)
this()表示调用构造方法,此种调用只能用在构造方法中,即构造方法中调用构造方法this(实参)。
1、this()、this(实参)必须方法构造方法的第一行
2、在有参数构造方法中调用无参数构造方法this();在无参数的构造方法中调用有参数的构造方法this(实参)
7.java所有类都是object类的子类
8.父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类)
9.子类最多只能继承一个父类(指直接继承),即java中是单继承机制
10.不能滥用继承,子类和父类之间必须满足is-a的逻辑关系
本质:
当子类对象创建好以后,内存中建立了一种查找关系
5. 多态
方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的
多态的具体体现:
1.方法的多态
class C{
public static void main(String[] args)
{
//方法重载体现多态
A a = new A();
System.out.println(a.sum(10,20));
System.out.println(a.sum(10,20,30));
//我们通过不同的参数格式去调用sum方法,就会去调用不同的方法,
//因此对sum方法来说,就是多种状态的体现
//方法重写体现多态
B b=new B();
a.say();
b.say();
}
}
class B{
//父类
public void say(){
System.out.println(" B say()方法被调用")
}
}
class A extends B{
//子类
public int sum(int n1,int n2)
{//和下面的sum构成重载
return n1+n2;
}
public int sum(int n1,int n2, int n3)
{
return n1+n2+n3;
}
}
2.对象的多态(多态的核心)
- 一个对象的编译类型和运行类型可以不一致
- 编译类型在定义对象时,就确定了,不能改变
- 运行类型是可以变化的。
- 编译类型看 定义时 = 号的左边,运行类型看 =号的右边
eg:
Animal animal = new Dog(); animal 编译类型是Animal,运行类型Dog。
animal = new Cat(); animal 的运行类型变成了Cat,编译类型仍然是Animal。
多态的前提是:两个对象(类)存在继承关系
多态的向上转型
1.本质:父类的引用指向了子类的对象
2.语法:父类类型 引用名 = new 子类类型();
3.特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限),不能调用子类中特有成员;最终运行效果看子类的具体实现,也就是说调用方法时要从子类开始查找 !
(因为在编译阶段,能调用哪些成员,是由编译器类型来决定的)
Animal animal = new Cat();
animal.eat();
多态的向下转型
1.语法:子类类型 引用名 = (子类类型)父类引用;
2.只能强转父类的引用,不能强转父类的对象
3.要求父类的引用必须指向的是当前目标类型的对象
4.可以调用子类类型中所有的成员
6. super
7. overwrite(重写)
方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称,返回类型,参数相同,那么我们就说子类的这个方法覆盖了父类那个方法
方法重写又叫方法覆盖,需要满足下面的条件:
public > protected > 默认 > private