Java基础第三弹


Java基础知识全解第三弹

记录回顾自己学过的java常见的基础知识,希望可以给初学者一些帮助,如果合适的话希望各位给一个免费的点赞和关注,在此谢谢各位了。

一、面向对象编程

1.1 面向对象编程思想

拿到一个问题域时,找名词,将名词分别成两类:实体、属性。

一个实体一个类

一个属性是类中的成员变量

接下来找动词,一个动词是类中的方法

类与类之间的关联关系体现在一个类的对象是另一个类的方法参数

1.2 类和对象关系

1.2.1 类

​ 在java中我们使用class关键字来定义类,类实际上就是一类具有共通属性和行为的对象的集合,起到一个模板作用,比如生产汽车需要设计图纸,类就好比设计图纸,类中可以有属性和方法,属性体现一类对象共通的属性,而方法则是体现这类对象具有的本能和能力。

1.2.2 对象

​ 对象是类的一个具体实例,比如上面提及到的汽车设计图纸,类是设计图纸的话,那么对象就是根据图纸生产出来的具体汽车,每个对象都具备类中的属性和功能。

2. 对象创建和使用

需求:创建一个学生类,并创建两个学生对象,为属性赋值,同时调用方法

语法 :

修饰符 class 类名 {
    //属性
    //方法
}
注意:类名的命名规范
1.类名首字母大写
2.若由多个单词构成,则每个单词首字母大写

代码:

public class Student {
   
    String name;   
    int stuNo;

    public void showInfo() {
        System.out.println("我叫:"+name+",学号:"+stuNo);
    }
}


public static void main(String[] args) {
        //1.如何通过类去创建一个对象
        //类名  对象名  = new 类名();
        Student zs = new Student();
        Student ls = new Student();

        //2.为对象的属性赋值
        zs.name = "张三";
        zs.stuNo = 1001;

        //3.获取对象的属性值
        System.out.println(zs.name);

        //4.调用方法,通过对象名.方法名(实参)
        zs.showInfo();
        ls.showInfo();
    }

3.构造方法

​ 这是一种创建对象的方法,他和类同名,只能被new关键字调用,然后来创建对象。构造方法没有返回值,并且不能写void

如果没有构造方法,系统会默认提供一个无参的构造方法

如果写了构造方法,系统就不再提供构造方法。

我们在构造方法中,通常写赋值语句,将调用者传入的参数赋值给当前对象的成员变量。

一般来讲,当我们写了一个有参的构造方法后,还需写一个无参的构造方法。

4.方法的调用

我们可以使用对象.成员变量来进行方法

我们可以使用对象.方法来调用方法

5.java的内存结构

java程序在运行过程中,会把内存分为五块:

①栈:存放局部变量、方法运行也是在栈中运行的

②堆:存放对象

③方法区:分为常量池和静态代码区,常量池用来存放常量和静态变量,静态代码区用来加载代码

④本地方法栈:与操作系统相关

⑤程序计数器:与cpu相关

练习题:

定义一个Point类,表示三维空间中的一个点

属性:double x,y,z表示它的坐标

要求:提供构造方法创建一个点对象并赋属性值

分别提供一个修改下,x,y,z的方法

另一个提供计算某点到原点距离的方法

编写测试类进行以上功能的验证。

//Point类
public class Point {
    double x;
    double y;
    double z;
    Point(){

}
Point(double x,double y,double z){
 this.x=x;
 this.y=y;
 this.z=z;
}

   public void setX(double x){
        this.x=x;

}
public void setY(double y){
    this.y=y;

}
public void setZ(double z){
    this.z=z;

}
public double mathlen(double x,double y,double z){
    double x1=x*x;
    double y1=y*y;
    double z1=z*z;
    return Math.sqrt(x1+y1+z1);
}//可以优化成如下传入参数为Point类型,通过传入Point的属性与本身点的属性进行计算。可以不止算出原点到该点的距离,也可以算出该点到任意一点的距离。


//测试类
public class TestPoint {
    public static void main(String[] args) {
        Point p = new Point(1,1,1);
        System.out.println("x="+p.x+"  y="+p.y+" z="+p.z);
        System.out.println("修改后为:");
        p.setX(2.0);
        p.setY(2.0);
        p.setZ(2.0);
        System.out.println("x="+p.x+"  y="+p.y+" z="+p.z);
        System.out.println("该点到原点的距离是:");
       System.out.println(p.mathlen(p.x,p.y,p.z));
    }//测试类

6. 成员变量和局部变量

  1. 位置不同

    ①成员变量:在类中

    ②局部变量:在方法中,形参,代码块

  2. 初始值不同

    ①成员变量:有初始值,比如引用类型null,基本类型比如int 0

    ②局部变量:必须初始化,才能使用【必须显示赋值,才能使用】

  3. 作用范围不同

    ①成员变量:整个类中

    ②局部变量:它所在的{}范围

  4. 在内存中的区域不同

    ①成员变量:在堆内存中

    ②局部变量:在栈中

  5. 生命周期不同

    ①成员变量:随着对象的存在而存在

    ②局部变量:在栈中,用完之后就出栈

总结:定义在方法以外的变量

7.方法的重载

​ 在一个类中,多个方法,方法名相同、参数不同,根据调用者传入参数来决定调用哪个方法,参数不同体现在要么个数不同,要么参数类型不同。

注意:构造方法也可以重载

二、this、static关键字

1.this

​ 当前对象的引用,他存放当前对象的内存地址,我们可以使用this.变量访问当前类的成员变量,我们还可以使用this.方法调用当前对象所在类的方法。

2.static(静态的)

它可以修饰成员变量或者成员方法,为static修饰的成员变量称为静态变量,静态变量存放在常量池,它在内存中有一份,被当前类的所对象共享,它可以来计数,静态的成员变量可以使用类名直接调用。

被static修饰的方法是静态方法,静态方法可以使用类名直接调用。

静态方法中不能包含非静态的成员,静态方法中也不能包含this。

三、包

1.包的由来

java中,为了解决类名冲突的问题,引入了包的机制,同一个包中不能出现相同的类,如果需要方法其他包中的类,需要添加全包名(带有包名的类名),包使用package关键字来定义,包有层次结构,以小数点分割。

2.import关键字

用来导入其他包中的类,导入之后就无需写全类名,*表示通配符,导入包下的所有类。

同一个包中的类,使用时无需导包,不同的包下的类才需要导包。
java.lang包是唯一一个无需导包就可以直接使用的包。
一般情况,我们通常将使用自己所在公司域名倒写做为自己的包名。

四、封装

1 .什么是封装

封装是我们面向对象三大特征之一。

面向对象的封装特性一般指的就是将对象的属性私有化,如果需要访问属性的话,可以对外提供公开的方法供外界访问。

2.JavaBean----实体类

在实体类中,要求所有成员变量私有化

对外提供公共的get/set方法用来为成员变量取值或赋值

至少在提供一个无参构造方法。

JavaBean体现了面向对象的封装性。

五、继承

1.为什么要用继承

在现实世界中,继承是经常见到的,java语言本身也是从现实生活演变而来的

麻雀、大雁、鸭子都是鸟类,它们都具有共通的属性和行为,比如说都有羽毛,都会飞等。

​ 所有的鸟类都可以飞行,但是这样会造成代码的冗余度比较高,所以在java中我们引入继承这个概念,让麻雀类和鸭类都继承鸟类,这样的话可以共享父类的属性和功能,继承通过extends关键字实现,但是需要注意的java只支持单继承,不像c++中可以实现多继承。但是在现实生活中单继承也是更符合伦理道德的,虽然java不能直接多继承,但是可以通过多次间接继承或者实现多个接口来弥补单继承的弊端。

2.什么是继承

“xxx是一种xxx”只要这句话说的通,这两者就有继承关系,子类继承父类,子类就自动拥有父类的所有属性和方法,除此外,子类还可以拥有自己新增加的属性和方法。

在Java中使用extends关键字来实现类的继承关系。

注意:Java中的继承是单继承,Java中的继承具有传递性。

3.方法重写

3.1重写的定义

继承关系的两个类,它们各种定义一个方法,方法声明部分相同,实现不同,根据调用者的类型决定调用的是那个方法。

3.2重写的条件

前提:必须存在继承关系

  1. 子类的方法名必须和父类方法名一致

  2. 子类的方法参数列表必须和父类的一致(参数个数、参数类型、参数位置)

  3. 子类的方法返回值类型必须和父类的一致

  4. 子类的方法的访问范围不能小于父类方法的访问范围

3.3@Override

该注解可以来修饰一个重写的方法,帮我们检查该方法是否是在重写。

4.super

1.super作用

super可以调用当前对象所在类父类中方法。

它是一个引用,它存放当前父类对象里面的那个父类的内存地址,我们可以通过super,成员变量访问当前对象的父类对象中的成员变量。

​ 我们可以通过super.方法调用当前对象所在父类中的方法。

5. 访问修饰符

1.访问控制符
同一个类同一个包子类在任何地方
privateY
默认YY
protectedYYY
publicYYYY

注意:子类拥有父类所有的属性和方法,但是不能使用父类中的private修饰的属性和方法

注意:对于class的修饰只有默认和public两种,如果是默认,则该类只能在当前包使用,如果是public,则在任何地方都可以使用。

总结

java基础第三弹,主要介绍了java中面向对象相关的知识点,我在整理资料和编写的过程中,完成了对这些java相关知识的梳理和深刻理解。希望我对知识梳理的成果对各位读者有所帮助。再次感谢各位的阅读,一个菜鸟的起飞之路。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值