首页 > 编程语言 >Java基础第三弹

Java基础第三弹

时间:2024-07-18 21:00:41浏览次数:21  
标签:Java 对象 double 基础 第三 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相关知识的梳理和深刻理解。希望我对知识梳理的成果对各位读者有所帮助。再次感谢各位的阅读,一个菜鸟的起飞之路。

标签:Java,对象,double,基础,第三,java,父类,方法,属性
From: https://blog.csdn.net/qq_65124761/article/details/140507332

相关文章

  • 第四节 JMeter基础-初级登录【固定用户登录】
    声明:本文所记录的仅本次接口测试所用到的知识点。1.认识JMeter(1)测试计划:测试的起点,所有组件的容器。相当于一个测试项目,对测试计划展开一系列的操作。(2)线程组:一定数量的用户。  ①线程数:1。默认为1,表示一个用户。  ②Ramp-UP时间:1。默认是1秒,表示启动线程的时间。在n秒......
  • 十天学会Python——第8天:Linux基础
    1Linux基础1.1认识LinuxLinux目录:1Linux系统只有一个根目录/,所有原文件都在它下面2Linux主要目录/:根目录/bin:可执行的二进制文件的目录/etc:系统配置文件存放的目录/home:用户家目录1.2Linux基础命令1.2.1查看目录命令命令说明ls查看当前路径的目录信......
  • C++基础-引用详解(全网最详细,看这篇就够了)
    目录前言一、引用的概念二、引用的特性三、常引用四、引用的使用场景4.1引用做参数4.2引用做返回值五、传值、传引用效率比较5.1值和引用的作为返回值类型的性能比较5.2值和引用作为参数传递之间的性能差别六、引用和指针的区别结束语前言本节我们正式进入C++......
  • RxJava快速入门
    简单来说RxJava是一个实现响应式编程的类库。那什么是响应式编程?响应式编程的核心思想是"数据流是第一等公民”,程序的逻辑建立在数据流的变化之上。响应式编程的几个核心概念:(1)数据流:在响应式编程中,数据以流(Streans)的形式存在。流就像一条河,源源不断。比如一个数组或集合可......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-01 软件工具环境搭建
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑!1代码编辑vscode工具软件安......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-01 软件工具环境搭建
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑!1代码编辑vscode工具软件安装使用......
  • 揭秘Java世界:轻松检测两个List是否有交集
    哈喽,大家好,我是木头左!快速入门:什么是List的交集?在Java中,当提到两个List的交集,指的是这两个列表共有的元素集合。例如,如果有两个List,其中一个包含元素A,B,C,另一个包含B,C,D,那么它们的交集就是B,C。理解了这一点,就可以开始探讨如何检测这个交集,以及它对编程实践的意义。Ja......
  • Java中interface的default和static方法
    Java中interface的default和static方法Java中interface的default和static方法完整代码及其运行结果从Java8开始:static方法:接口不能通过实例调用static方法接口中的static方法不能被继承子类不能继承接口的static方法,可以继承、不能覆写父类的static方法。default......
  • iOS开发基础133-GCD相关
    先看一段代码,这是项目中图片上传的一部分代码。//开启线程组上传图片dispatch_group_tgroup=dispatch_group_create();[self.selectedPhotosenumerateObjectsUsingBlock:^(UIImage*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop){dispatch_gro......
  • java map 是线程安全吗 map的线程安全实现类 推荐使用 ConcurrentHashMap
    javamap是线程安全吗map的线程安全实现类推荐使用ConcurrentHashMapHashMap线程安全的吗?Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。看下面两个场景:1、当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全......