java基础

Posted 风尘小白沙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础相关的知识,希望对你有一定的参考价值。

、面向对象基础

  • 类与对象
  • 封装
  • 构造方法
  • 方法
  • 重载
  • 对象数组
  • this关键字
  • static关键字

1.1类与对象

类:类是抽象的,概念上的,共性的,是对象的模板

对象:个体,具体的,可以看见的,对象是个性的,是该类事物的每个个体,也称为类的实例。

类的组成:

  • 方法
  • 属性

对象的创建

  • 类名 对象名= new 类名()

对象的引用传递问题

  • 注意引用的是对象堆内存的空间

1.2封装

面向对象的特性:封装,继承,多态

封装的概念:使用private实现类的封装,用private关键字修饰属性,修饰方法,private的含义是私有的,使用private修饰的方法和属性不能被外部直接访问。

封装的特性:通过使用封装的属性,要通过get,set方法来获得和设值。

1.3构造方法的问题

构造方法的作用:构造方法的作用主要是用来构造对象并且为对象的属性赋值。构造方法的定义规则:

  • 无需任何的放回值类型
  • 方法名称必须和类重名

1.4方法

方法的定义

public|private|protected|默认  + static|默认|synchroized|native|abstract+返回值类型|void|空+方法名称(参数)+ throws Exception{
   方法体

}

方法的调用:

  • 如果是普通方法,通过对象去调用
  • 如果是构造方法,通过实例化去调用
  • 如果是静态方法,可以通过类名直接访问

2.4对象数组

以类作为数组的类型,以对象作为数组的元素

Person p[] = new Person[10];//一类作为数组的类型,元素就是对象
        for (int j = 0; j < p.length; j++) {
            Person px = new Person("张三",20+j);
            p[j] = px;
        }
        
        for (int j = 0; j < p.length; j++) {
            Person per = p[j];
            System.out.println(per.getName()+"===="+per.getAge());

        }

2.5方法的重载

在同一个类中,方法的名称相同,返回值的类型相同,但是参数的个数,类型,顺序不同就叫做重载,重载是面向对象多态性的一个体现。

//吃饭
    public void eat(){
        System.out.println(name + "在吃饭");
    }
    public void eat(int x){
        System.out.println(name + "在吃饭,吃了"+ x +"碗。");
    }

2.6this的关键字的用法

this关键字可以表示当前对象

this关键字可以表示当前类的属性

this关键字可以表示调用当前类的方法

this关键字调用当前类的构造方法

2.7static关键字

  • static变量的声明和使用
  • static方法的声明及使用
  • static方法块的声明及使用

static变量:使用static修饰的变量就叫做静态变量

static方法:使用static修饰的方法就叫做静态方法

public class OopDemo01 {
    static int score = 70;//静态变量
    double salary = 5000.00;//普通变量
    public static void add(){//静态方法
        //eat();静态方法中不能调用非静态方法
        System.out.println(score);
        //System.out.println(salary);静态方法不能调用非静态变量
    }
    public void eat(){//普通方法
        add();//非静态方法可以调用静态方法
        System.out.println(score);//普通方法可以调用静态变量
        System.out.println(salary);
    }
    public static void main(String[] args) {
        
    }

对于静态方法调用的问题

  • 静态方法中不能调用非静态方法,静态方法不能调用非静态变量
  • 非静态方法可以调用静态方法,普通方法可以调用静态变量

栈:保存属性(变量)名称

堆:保存属性(变量)值

全局数据区: static修饰的变量

全局代码区:static修饰的方法

  •   代码块:使用一对{}围起来的就是代码块:
  •        普通代码块:写在方法中的语句
  •        构造块(实例块):直接写在类中的语句,优于构造方法先执行,在实例化多个对象的时候,构造块执行多次
  •        静态块:直接写在类中,使用static修饰,是优于构造块先执行,在实例化多个对象的时候,静态块只执行一次

面向对象高级部分

  • 继承
  • 抽象类
  • 接口
  • 多态

2.1继承

继承的作用:

  • 通过继承可以简化子类的定义
  • 扩展子类的功能

子类通过extends关键字继承父类

继承的特点:子类可以继承父类一切非私有的属性和方法

继承的规定:

  • java只支持单继承,一个类不能同时有多个父类(一个人只有一个父亲一样)
  • java支持多层继承,一个类继承自父类,父类也可以自爷爷类

子类的实例化过程:实例化子类对象的时候会先调用父类的构造方法,说明父类也进行了实例化对象操作,实际上调用父类的构造方法构造父类对象就是为子类对象开辟空间,而且可以为父类的属性初始值。

super关键字的使用:父类也称为超类()

  • super关键字可以调用父类的属性(非私有)
  • super可以调用父类的方法(非私有)
  • super关键字可以调用父类的构造方法(必须放在首行)

方法的复写()

方法的重写的定义:方法的返回值的类型,方法名称,方法里的参数的个数,顺序,类型一致,就是方法的复写,子类复写父类的方法,调用子类的方法,扩展父类的属性,复写分类的方法子类的访问权限必须要大于等于父类的方法,父类的方法不能为private。

复写和重载的区别:

序号

重载

覆写

1概念

名称相同,参数的个数类型顺序不同

方法名称相同,访问权限不小于父类被覆写方法,参数相同,返回值类型相同

2范围

在同一类中

在继承关系中,子类覆写父类方法

 访问修饰符

位置

private

默认

protected

public

同类

V

V

V

V

同包的类

X

V

V

V

不同包的字类

X

X

V

V

不同包且不是字类

X

X

X

V

public|private|protected|默认  + static|默认|synchroized|native|abstract+返回值类型|void|空+方法名称(参数)+ throws Exception{
   方法体

}

2.3抽象类

final :在java中final可以修饰变量方法,类

  • 使用final修饰的变量就是常量,只能赋值一次,而且常量一般使用大写字母来表示常量名称。
  • 使用final修饰的方法不能被子类复写
  • 使用final修饰的就是太监类,不能拥有子类
  • 抽象类:使用abstract修饰的类就是抽象类
  • 抽象方法:使用abstract修饰的方法就是抽象方法
package com.wanczy.oopHightLevelDemo;

public abstract class OopDemo003 {//定义就是抽象类
    
    public abstract void eat();//声明抽象方法
    
}

抽象方法只需要声明不需要实现,有一个抽象方法必须定义为抽象类

抽象类和普通类相比区别:抽象类比普通类多了抽象方法,普通类中的所有定义都可以在抽象类中使用

抽象类的使用规则:

  • 抽象类本身不能实例化
  • 抽象类中的抽象方法只需要声明,不需要实现
  • 含有抽象方法的类必须声明为抽象类
  • 抽象类必须要有子类,不然抽象类没有任何意义,抽象类的子类必须要复写抽象类中的全部抽象方法。
  • 抽象类中可以有抽象方法
  • 抽象类中不可以用final声明

范例:现在有两类员工,一类是技术类,一类是销售类,两种员工的提升工资的方式不一样,技术员工类按照岗位等级提升,销售员工按照上一年度销售业绩来提升工资

package com.wanczy.abstractDemo;

public abstract class Employee {
    private String name;
    private double salary;//工资
    
    public Employee() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Employee(String name, double salary) {
        super();
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public abstract void updSalary();//提升工资的抽象方法
}
package com.wanczy.abstractDemo;

public class TechEmployee extends Employee{
    private String post;//岗位等级
    @Override
    public void updSalary() {
        // TODO Auto-generated method stub
        double salary = super.getSalary();
        if(this.post .equals("高级工程师")){
            super.setSalary(salary*1.05);
            
        }else if(this.post.equals("中级工程师")){
            super.setSalary(salary*1.1);
        }else if(this.post.equals("初级工程师")){
            
            super.setSalary(salary*1.15);
        }
        
    }
    public String getPost() {
        return post;
    }
    public void setPost(String post) {
        this.post = post;
    }
    public TechEmployee(String post) {
        super();
        this.post = post;
    }
    public TechEmployee() {
        super();
        // TODO Auto-generated constructor stub
    }
    public TechEmployee(String name, double salary,String post) {
        super(name, salary);
        this.post = post;
        // TODO Auto-generated constructor stub
    }
    
    
    
}
package com.wanczy.abstractDemo;

public class OopDemo01 {
    public static void main(String[] args) {
        Employee e = new SaleEmployee("长桑",3000,100);
        e.updSalary();
        System.out.println(e.getSalary());
    }
}    

通过以上程序,我们可以发现,如果以后出现其他的员工类型,提升工资的方式不同,可以编写抽象类的字类完成,不需要更改顶层设计。也就是说抽象类的作用就是在于可以方便程序的扩展。   

2.4接口

接口的声明使用interface,接口只有常量和抽象方法;

package com.wanczy.oopDemo;

public interface InterfaceDemo01 {
    //常量
    //抽象方法
    public abstract void eat();
    public abstract void run();
}

如果说一个抽象类只有抽象方法和常量的话,我们就可以使用接口来表示。接口中没有子类的概念,实现类,实现类通过implements实现接口,必须覆写接口中所有的抽象方法。

接口的使用规则:

  • 接口中访问权限永远都是public,public可以省列,省列后依然时public
  • 接口中的方法都是抽象方法,可以省列abstract,省列后依然是abstract方法
  • 接口中的常量可以省列final,省列后依然是常量
  • 接口在程序中叫实现,接口必须通过实现类实现,也必须要有实现类,不然接口没有意义
  • 接口本身不能实例化
  • 接口与接口之间可以继承,一个接口可以同时继承多个父接口,子接口中继承了父接口中所有抽象方法和常量
  • 实现类也可以实现多个接口,如果实现的多个接口中,有相同的抽象方法,那么实现类只需要复写一次

抽象类与接口的区别

 

抽象类

接口

相似

不能直接实例化,抽象类通过子类实例化,接口通过实现类实例化

不同

包含抽象方法、一般方法、变量、长流昂、构造方法

常量和抽象方法

抽象类可以实现接口

接口不继承抽象类

单继承的局限性

多继承多实现

2.7多态

多态的核心就是子类对象作为父类对象来使用,抽象类的子类对象作为抽象类对象使用,实现类对象作为接口的对象来使用。

3总结

理解抽象类和接口的区别

理解重载和覆写的区别

熟记继承的特点以及规定(super关键字的使用)

以上是关于java基础的主要内容,如果未能解决你的问题,请参考以下文章

JSP 基础语法

Java基础:封装

[vscode]--HTML代码片段(基础版,reactvuejquery)

JSP开发中的基础语法

Java基础之方法的调用重载以及简单的递归

Java基础——JSP