java入门第三节

这篇具有很好参考价值的文章主要介绍了java入门第三节。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java入门第三节 

一.什么是oop

1.pop与oop

(1).面向过程编程:(POP:Procedure Oriented Programming)

1.步骤清晰简单,第一步做什么,第二步做什么,按照顺序;

2.代码线性,严格按着顺序,侧重解决步骤

3.适合处理一些简单的问题


(2).面向对象编程:(OOP:Object Oriented Programming)

1.物以类聚,分类的思维方式,首先站在更高的层次看待事物,解决那些问题需要分类,然后对这些分类进行单独思考并规划和设计,最后才对某个分类下的细节进行面向过程的思考;(如.制定学习计划,先分科目,如英语,数学,再对每个科目怎么学进行思考,最后按计划依次执行)

2.明确目标,对象就是目标,目标就是对象

3.面向对象适合处理一些复杂的问题,适合处理多人协作的问题;(如.学校里面有很多老师,每个老师教的课程是不一样的,所有进行了分类,协作教育学生)

2.关于OOP的一些基本概念

(1).面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据;

(2).三大特性:封装,继承,多态

(3).从认识论角度考虑是先有对象后有类。对象,是具体的事物(如.人)。类,是抽象的,是对对象的抽象(如.一个组织);

(4).从代码运行角度考虑是先有类后有对象,类是对象的模板;(如.印钞必须先有钞票的模板才能印钞)

3.类与对象的关系 

Java 对象和类 | 菜鸟教程 (runoob.com)

(1).类:类是一种抽象的数据类型,它是对一类事物整体描述/定义,但是并不能代表一个具体的事物;(如.动物,手机,电脑,公司,等等)

(2).对象:对象是抽象的具体实例;

(3).实例:显示生活中的一个东西,对抽象的东西(对象)进行表示出来的产物,是一个活生生存在的事物,他是唯一的。对象 >= 实例;(如.张大爷家的狗,路上的一个行人)

(4).属性:类中的变量和方法总称为属性,属性包括共性与特性;

可以简单理解为类是一个模板,对象是一个具体的实例;

4.对抽象的理解 

抽象是指将具体的事物抽象出来;

其实说白了,抽象---》抽出相同特征的对象(实例), 他和具体又是相对的。

如.吃盖饭抽象的说就是吃饭,吃饭具体的说就是吃什么。人类具体的说就是分女人和男人,人类抽象的说就是动物;

二.提出问题养狗社区 

面向过程(C语言) 面向对象(Java)
流水线(步骤) 模块化(分类)
一件事"该怎么做" 一件事"该让谁来做"
狗饿了,狗吃了食物 属性:狗、食物、饿;动作:狗吃食物
强调的是“吃”,“狗”只是一个参数 强调的是“吃”,“狗”只是一个参数

如果使用C语言写会非常麻烦,因为它是按照顺序来的,但是每一只狗的作息是不一样的,使用C语言的话每一只狗都要写一遍非常麻烦;

如果使用Java写,我们只需要把这些狗的共性和特性提取出来,形成一个个模块(如.吃,睡觉,等等),让狗主人自己填写狗的作息;

使用我们使用Java写养狗社区;

package com.microsoft.bean;
 
// 狗类(狗属性)
public class Dogs {
 
// 狗的状态
    // 下面每一个狗的状态,都是类中的一个成员,它们是类的重要组成部分;
    // 成员变量:它们组成和构成了类,所有我们这么命名
 
    // 狗名字
    public String name;
 
    // 狗种类
    public String variety;
 
    // 狗的年龄
    public int age;
 
    // 狗的食物
    public String food;
 
 
// 狗的行为(就是狗的动作,在类中被称为行为)
    public void eat() {
        System.out.println(this.name+"狗吃饭");
    }
 
    public void sleep() {
        System.out.println(this.name+"狗睡觉");
    }
 
    public void run() {
        System.out.println(this.name+"狗正在奔跑");
    }
 
}
 

 一个项目只能有一个main方法,所以我们要定义一个测试文件为Application

import com.microsoft.bean.Dogs;
 
public class Application {
    public static void main(String[] args) {
 
        
        // 张大爷家的狗是狗类中的一个实例
        // // 张大爷,注册APP
        Dogs zhangDog = new Dogs();
  
 
        // 张大爷设置狗的状态
        zhangDog.name = "阿黄";
        zhangDog.variety = "中华田园犬";
        zhangDog.age = 2;
        zhangDog.food = "剩菜剩饭";
 
        // 张大爷设置狗现在的行为
        zhangDog.eat();
    }
}

三.方法与变量的分类

1.非静态变量与非静态方法 

上面定义狗的一些状态与行为,没有使用Static,使用我们可以称为这些为非静态变量与非静态方法;

所以我们要调用时,要先实例化这个对象,所以new关键字

使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中的构造器的调用;(构造器我们后面会讲)

         // 张大爷,注册APP,使用new实例化
        // 格式:对象类型 对象名 = new 对象值;
        Dogs zhangDog = new Dogs();

        // 张大爷设置狗的状态
        zhangDog.name = "阿黄";
        zhangDog.variety = "中华田园犬";
        zhangDog.age = 2;
        zhangDog.food = "剩菜剩饭";
        
        // 调用非静态变量:对象名.变量名
        System.out.println("张大爷家狗的名字: " + zhangDog.name);
        
        // 张大爷设置狗现在的行为
        // 调用非静态方法:对象名.方法名
        zhangDog.eat();

2.静态变量与静态方法

有Static关键字修饰的变量与方法,我们叫静态变量与静态方法;

 // 狗所在的小区
    public static String plot = "希望小区";

    // 狗名字
    public String name;

    // 狗种类
    public String variety;

    // 狗的年龄
    public int age;

    // 狗的食物
    public String food;


    // 我们要给所以狗打疫苗
    public static void injection(){
        System.out.println("所以的狗,月底打疫苗");
    }
        // 张大爷,注册APP,使用new实例化
        Dogs zhangDog = new Dogs();

        // 张大爷设置狗的状态
        zhangDog.name = "阿黄";
        zhangDog.variety = "中华田园犬";
        zhangDog.age = 2;
        zhangDog.food = "剩菜剩饭";

       // 调用静态变量使用:类名.变量名
        // 原因静态变量是属于整个类的,不属于某个对象
        System.out.println("张大爷的狗所在小区" +Dogs.plot);

        // 调用静态方法属于:类名.方法名
        // 原因静态方法是属于整个类的,不属于某个对象
        Dogs.injection();

四.注销账号和null空指针异常 

        // 张大爷,注册APP
        Dogs zhangDog = new Dogs();
 
        // 张大爷家的狗是狗类中的一个实例
 
        // 张大爷设置狗的状态
        zhangDog.name = "阿黄";
        zhangDog.variety = "中华田园犬";
        zhangDog.age = 2;
        zhangDog.food = "剩菜剩饭";
 
        // 张大爷注销账号
        zhangDog = null;
 
        // 注销后就不能在调用否则会出现空指针异常
        System.out.println("张大爷家狗的名字: " + zhangDog.name);

 NullPointerExceptionjava入门第三节,java,开发语言

原因:指针原本指向张大爷家的狗,注销账号后指向一个空白的区域 

 五.简单内存分析

java入门第三节,java,开发语言

java入门第三节,java,开发语言

 第一步:加载Application类与静态方法(从这里可以看出静态变量与方法与类一起加载,所有对象都可以使用),进入main函数java入门第三节,java,开发语言

第二步:加载Dogs类java入门第三节,java,开发语言

第三步:张大爷注册app,使用Dogs zhangDog = new Dogs();,在栈生成引用变量名,对象生成在堆里,堆里的对象是通过Dogs类为模板生成,引用变量名指向它在堆中的地址;java入门第三节,java,开发语言

 第四步:赋值java入门第三节,java,开发语言

六.OOP封装

问题: 

pubilc 公有的,公共的-------用户可以随意修改(如.上面张大爷注册账号时可以随意填写狗的信息,如果在里面的东西与钱挂钩的话,那么用户也可以随意修改)

解决:

private 私有的------用户不能随意修改,我们给一个用户能设置,能获取,但不能随意设置,使用getset关键字,快捷方式Alt+insert

 java入门第三节,java,开发语言

Ctrl+a全选,然后回车 

 java入门第三节,java,开发语言

 this表示:本身调用者这个对象

package com.microsoft.bean;


public class Dogs {

    // 狗所在的小区
    public static String plot = "希望小区";

    // 狗名字
    private String name;

    // 狗种类
    private String variety;

    // 狗的年龄
    private int age;

    // 狗的食物
    private String food;

    // 约束
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        if (name.length() < 20) {
            this.name = name;
        }else {
            System.out.println("你的狗名字过长");
        }
    }

    public String getVariety() {
        return variety;
    }

    public void setVariety(String variety) {
        this.variety = variety;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 0 && age <30){
            this.age = age;
        }else {
            System.out.println("你的狗年龄错误");
        }
    }

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    
    // 我们要给所以狗打疫苗
    public static void injection(){
        System.out.println("所以的狗,月底打疫苗");
    }

    // 狗的行为(就是狗的动作,在类中被称为行为)
    public void eat() {
        System.out.println(this.name+"狗吃饭");
    }

    public void sleep() {
        System.out.println(this.name+"狗睡觉");
    }

    public void run() {
        System.out.println(this.name+"狗正在奔跑");
    }

}

​
import com.microsoft.bean.Dogs;

public class Application {
    public static void main(String[] args) {

        // 张大爷,注册APP,使用new实例化
        Dogs zhangDog = new Dogs();

        // 张大爷设置狗的状态
        // 输入使用set
        zhangDog.setName("阿黄");
        zhangDog.setVariety("中华田园犬");
        zhangDog.setAge(10);
        zhangDog.setFood("剩菜剩饭");

        // 输出使用get
        System.out.println(zhangDog.getAge());
    }
}

​

 出现问题,每一个成员变量都要写getset非常麻烦,所有出现了一个架包

java入门第三节,java,开发语言

下载完插件后,我们要下载架包 

架包网站:Maven Repository: org.projectlombok » lombok (mvnrepository.com)

选择版本,点进去,然后jar下载 

引入架包 java入门第三节,java,开发语言

然后将架包拖进去,接着选择作用范围 java入门第三节,java,开发语言

第一个表示全局,第二个表示这个项目,第三个表示模块  java入门第三节,java,开发语言

 如果想使用结包还要启用注解java入门第三节,java,开发语言

使用:特殊的可以单写,这个叫方法的重写,我们后面会讲

package com.microsoft.bean;

import lombok.Getter;
import lombok.Setter;


// 也可以写在一个成员变量后,只对一个成员变量起作用
@Getter
@Setter

public class Dogs {

    // 狗所在的小区
    public static String plot = "希望小区";

    // 狗名字
    private String name;

    // 狗种类
    private String variety;

    // 狗的年龄
    private int age;

    // 狗的食物
    private String food;


    // 方法的重写
    public void setName(String name) {
        if (name.length() < 20) {
            this.name = name;
        }else {
            System.out.println("你的狗名字过长");
        }
    }
    public void setAge(int age) {
        if (age > 0 && age <30){
            this.age = age;
        }else {
            System.out.println("你的狗年龄错误");
        }
    }
    
    // 我们要给所以狗打疫苗
    public static void injection(){
        System.out.println("所以的狗,月底打疫苗");
    }

    // 狗的行为(就是狗的动作,在类中被称为行为)
    public void eat() {
        System.out.println(this.name+"狗吃饭");
    }

    public void sleep() {
        System.out.println(this.name+"狗睡觉");
    }

    public void run() {
        System.out.println(this.name+"狗正在奔跑");
    }

}

七.toString 

        // 张大爷设置狗的状态
        zhangDog.setName("阿黄");
        zhangDog.setVariety("中华田园犬");
        zhangDog.setAge(10);
        zhangDog.setFood("剩菜剩饭");
 
        // 如果我们想要输出张大爷家的狗所有信息需要写四条输出语句
        // 如果使用toString,我们只需写一条输出语句

 java入门第三节,java,开发语言

快捷方式Alt+insert,然后全选,生成 

 @Override
    public String toString() {
        return "Dogs{" +
                "name='" + name + '\'' +
                ", variety='" + variety + '\'' +
                ", age=" + age +
                ", food='" + food + '\'' +
                '}';
    }

  也可以直接使用架包引入

 
import lombok.ToString;
 
// 也可以写在一个成员变量后,只对一个成员变量起作用
@ToString

 效果java入门第三节,java,开发语言

补充: 补充如果要使用图中三个方法,可以引入架包@Date java入门第三节,java,开发语言

八.构造方法 

 问题:

张大爷想要在注册账号时,填写狗的基本信息

解决:

使用构造函数,初始化对象(实例);

  /*
    类中的构造器也称为构造方法,是在进行创建对象(new)的时候必须调用的;
    构造器有两大特点:
    1.必须和类的名字相同
    2.必须没有返回值类型,也不能写void
     */


    // 无参数构造函数(无参构造器),每创建一个类,都会有一个无参构造器;
    // 如果是系统自带的类会默认创建,要是自己引入的类需要自己,手动创建;
    public Dogs() {
    }

    // 有参数的构造函数(有参构造),一但定义有有参构造,无参构造就必须定义;
    // 有参构造使用了方法的重载
    public Dogs(String name, String variety, int age, String food) {
        this.name = name;
        this.variety = variety;
        this.age = age;
        this.food = food;
    }
import com.microsoft.bean.Dogs;

public class Application {
    public static void main(String[] args) {


        // 张大爷,注册APP,并设置狗的基本信息
        Dogs zhangDog = new Dogs("阿黄","中华田园犬",10,"剩菜剩饭");

        System.out.println("张大爷家的狗所有信息" +zhangDog);
    }
}

总结:在创建对象时是有调用构造器来初始化值,无参构造默认存在,有参构造是方法重载; 

快捷方式Alt+insert,然后选择初始化对象

java入门第三节,java,开发语言

 java入门第三节,java,开发语言

九.垃圾回收机制 

ava自动会进行垃圾回收,所有我们不用管

如果需要手动,使用:

 System.gc();

 十.关键字Static

问题:

静态变量与方法加private,会出现输出不了的问题;java入门第三节,java,开发语言

 解决:

public static String getPlotInstance(){
        return plot;
    }

静态不用写set 

  System.out.println("张大爷家狗住的小区:" +Dogs.getPlotInstance());

1.Static单例设计模式 

单例设计模式是一种创建对象的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例;

简单来说就是:不提供new的方法,只提供对外操作的方法;

package com.microsoft.bean;

public class Earth {

    // new 一个新的地球,自己new自己,只有Earth类内可以修改
    private static Earth earthInstance = new Earth();

    // 外部无法new新的Earth
    private Earth() {
    }

    // 提供外部操作方法
    public static Earth getEarthInstance(){
        return earthInstance;
    }

    public void showMessage(){
        System.out.println("Hello Earth!");
    }
}
        // 获取唯一可用的对象
        Earth object = Earth.getEarthInstance();

        // 显示消息
        object.showMessage();

2.静态代码块

package com.microsoft.bean;

public class Earth {

    {
        System.out.println("匿名代码块");
    }


    static {
        System.out.println("静态代码块");
    }

    public Earth() {
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
        System.out.println("第一次调用");
        Earth temp = new Earth();
        System.out.println("\n第二次调用");
        Earth tempTwo = new Earth();

    }
}

java入门第三节,java,开发语言

原因:Static关键字是与类一起加载所有首先调用,且静态代码块只能调用一次; 

3.静态导入包 

导入前调用方法:类名.方法

System.out.println(Math.random());

导入后调用方法:方法

import static java.lang.Math.random;


 System.out.println(random());

十一.内部类

1.成员内部类 

package com.microsoft.bean;

public class Earth {

    // 外部类

    public class Sun{
        // 内部类
        public void fuck() {
            System.out.println("这是内部类");
        }
    }

}
        // 创建内部类对象:可以在外部类中创建内部类的对象
        Earth earth = new Earth();
        Earth.Sun sun = earth.new Sun();
        // 调用
        sun.fuck();

2.静态内部类 

package com.microsoft.bean;

public class Earth {

    public static class Sun{
            public void fuck() {
                System.out.println("这是静态内部类");
            }
        }

  }
          // 创建内部类对象:可以直接通过类名创建静态内部类的对象
        Earth.Sun temp = new Earth.Sun();

        temp.fuck();

 3.局部内部类

package com.microsoft.bean;
public class Earth {

    public static void main(String[] args) {
        
        class drop{
            public void man() {
            }
        }
    }
    
}

4.匿名内部类(没有名字的内部类)

这个要学完接口后,再回来看,这个一般用到接口上

这是我们第四课接口中用到例子 

package com.microsoft.bean;

public interface Human {

    // 接口中所有方法都是抽象的

    // 吃饭,每个地区饮食是不一样的
    public void eat();

    // 喝水,每个地区是不一样的
    public void drink();
}

我们可以不用创建一个新类,也可以实现接口,直接应用 文章来源地址https://www.toymoban.com/news/detail-686273.html

import com.microsoft.bean.*;

public class Application {
    public static void main(String[] args) {

        Human chinese = new Human() {
            @Override
            public void eat() {
                System.out.println("吃中餐");
            }

            @Override
            public void drink() {
                System.out.println("喝热水");
            }
        };

        chinese.eat();
        chinese.drink();


    }
}

到了这里,关于java入门第三节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java入门第一步:写出你的Hello World

    当你学习一种新的编程语言时,通常你会看到第一个程序被称为“Hello World”程序。它通常用于初学者的简单程序。 假设你是作为 Java 编程语言的初学者阅读这篇文章的,或者你是来回忆那个古老的“Hello World”程序的。这篇文章不仅包括 Java 中的“Hello World”程序,我们还将

    2024年02月15日
    浏览(42)
  • 【前端web入门第一天】01 开发环境、HTML基本语法文本标签

    文章目录: 1. 准备开发环境 1.1 vs Code基本使用 2.HTML文本标签 2.1 标签语法 2.2 HTML基本骨架 2.3 标签的关系 2.4 注释 2.5 标题标签 2.6 段落标签 2.7 换行与水平线标签 2.8 文本格式化标签 VSCode与谷歌浏览器离线版,安装包评论区自提. VSCode默认安装位置:C:UsershpAppDataLocalProgramsMic

    2024年01月25日
    浏览(49)
  • 黑马程序员Java基础入门第三版答案1

    1、 关于编译HelloWorld.java程序的命令,下列选项中正确的是() 2分 A、A、java HelloWorld.java B、B、javac HelloWorld C、C、java HelloWorld D、D、javac HelloWorld.java 参考答案 : D 答案说明 : 无 2、 下面选项中,用于定义类的的是() 2分 A、A、main B、B、class C、C、static D、D、public 参考

    2024年01月18日
    浏览(39)
  • 黑马程序员Java基础入门第三版第六章

    单选题 1、 正则表达式中表示单词边界的元字符是() 2分 A、A、A B、B、G C、C、B D、D、b 参考答案 : D 答案说明 : 无 2、 下列关于LocalTime类与LocalDateTime类的描述错误的的是() 2分 A、A、LocalTime类能代表时间线上的即时信息。 B、B、LocalDateTime类是LocalDate类与LocalTime类的综

    2024年02月06日
    浏览(41)
  • 详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第三节 (封装TabBar JS版)

    本组件通过HML布局、CSS样式和JS逻辑封装实现一个通用的Tabbar。支持可配置的Tab项和对应页面,可以方便接入到不同页面中,提高开发效率。 HML部分采用Flex布局实现Tabbar的整体结构,包含多个Tab项。 CSS部分定义样式,包括图标大小、文字颜色等样式参数。支持后续扩展。 JS部分提

    2024年02月04日
    浏览(53)
  • 开发语言漫谈-Java

            由于C++过于复杂,Java诞生了。与C++相比,Java更易于学习和使用,它去掉C++中的指针和解决了内存管理问题。Java提供了垃圾自动回收机制,自动管理不再使用的内存。Python又进一步简化,使得语法更简洁,更易于阅读和编写。当然随着简化,性能就越来越低。    

    2024年04月10日
    浏览(46)
  • 海康威视相机SDK二次开发(JAVA语言)

    前言 有个项目需要使用java程序读取海康威视的相机图片。相机通过以太网连接服务器,部署在服务器上的java程序将相机拍摄的画面保存在指定路径下。 海康威视提供了sdk开发包,可以在官网中下载,windows和linux系统都有。但是开发包中给出的示例代码,无法满足实际需要,

    2024年04月29日
    浏览(46)
  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(57)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(61)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包