JAVA第三天面向对象 还有类

一、面向对象概述

​ 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。

js : prompt(); 能否把功能实现!

函数:function() 重复执行。

但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,增强可维护性,所以,面向对象的开发更像是一个具备标准的开发模式

面向对象的三大特征:封装,继承,多态。

java面向对象五大特征:封装,继承,多态,抽象,接口。

面向过程:针对开发中程序遇到的每一个问题,进行单个的编码解决。

面向对象:只对结果,不管实现的细节。

学习面向对象其实就是学习如何在代码中使用 封装,继承,多态。
在面向对象定义之中,也规定了一些基本的特征:

(1)封装:保护内部的操作不被破坏;

(2)继承:在原本的基础之上继续进行扩充;

(3)多态:在一个指定的范围之内进行概念的转换。
对于面向对象的开发来讲也分为三个过程:
OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。
代码不是为了更简单 是为了更快
总结面向对象最终的目的是在保证功能实现的基础上,方便后期程序的维护。

二、类和对象

2.1、类和对象的概述

类与对象是整个面向对象中的最基本的组成单元。

类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);

对象:对象是一种个体的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性值来区分不同对象,实实在在存在的。

类是对象的模板,对象是类的实例化。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象

类不能直接使用,对象是可以直接使用的。

2.2、类的定义

类不能工作
万物皆对象。程序是为了模拟现实。
程序中的类与对象。

[权限修饰符] class 类名{

}

注意

大驼峰,见名知意,$ _ 不能以数字开头,不能使用关键字。

public class Person {
    
    
    //定义一个类中共有的属性
    int age;
    String name;
    int height;
}

2.3、类对象的定义,的使用

为什么要·用对象? 为了更好的存储数据

JAVA中的对象。 想要用对象就必须先有类

创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。

java:
1、创建类 并且类中要定义我们想要的属性
2、根据创建好的类,创建对象
类名 对象名 = new 类名();
3、使用创建好的对象来调用类中的方法和属性。

案例

public class Dog {
    
    
    //属性:共有特征的提取
    String name;
    String color;
    String breed;
    //方法就是共有行为的提取
    void jbxx(){
    
    
        System.out.println("名字:"+name+"颜色:"+"品种:"+breed);
    }
    /*接收参数  food就是一个形式参数   形参
    他的值谁调用谁决定
    (参数列表: 数据类型 变量名 ,数据类型 变量名)
    * */
    String cc(String food,String yingliao){
    
    
        System.out.println(name+"吃"+food+",喝"+yingliao);

        //return 返回值 必须定义数据类型   void 代表没有返回值
        return  "吃饱了";//将结果给变量者
    }
    void kj(){
    
    
        System.out.println(name+"在看家");
    }


    public static void main (String []args){
    
    
        Dog xg=new Dog();
        xg.name="小黑";
        xg.color="黑色";
        xg.breed="中华田园犬";
        xg.jbxx();
        xg.cc("鸡头","白开水");
        xg.kj();
        String str=xg.cc("鸡头","白开水");
        System.out.println(str);
     
    }
}

以后:运行代码要创建一个测试类 JavaTest,在测试类中测试代码是否可以运行。
定义一个测试类来去测试代码的运行

三、方法的函数和使用

3.1、什么是方法/函数

函数是指一段可以直接被另一段程序引用(调用)的具有特定功能的程序。也叫做子程序、(OOP中)方法。

If(){ 代码块 }: 控制代码块是否执行

For(){ 代码块}:控制代码块执行次数

Function(){代码块}:控制代码块何时执行 (调用的时候执行)
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。

在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。

函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。

3.2、定义和调用

[权限修饰符] public [static] 返回值类型/void 方法名(参数列表){

	代码块;return 返回值 ;

}

 //权限修饰符     静态的   返回值类型    方法名  参数列表   
  public     [static]     void     show(int a,String b){
    
          
      }

都是非静态方法。
返回值类型:如果没有返回值,就是void 否则 根据具体的返回值的类型来写。类似 String int

方法和属性的调用:对象名.方法名(); 对象名.属性名;

3.3、参数和返回值

无参无返回值 没有返回值 要使用void 没有参数 小括号中不写内容。

public class Dem01{
    
    
public void aaa(){
    
    
	System.out.print("无参无返回值的方法aaa()")//void 没有返回值
}
public static void maing (String [] args){
    
    
	Dem01 dem01 =new Dem01();
	dem01.aaa();//创建类的对象通过创建的对象去调用这个方法
}
}

无参有返回值 没有参数 但是有返回值

public String bbb(){
    
    
	return "无参有返回值的方法aaa();

public static void main (String []args){
    
    
		Dem01 dem01 =new Dem01;
		dem01.aaa();
		String str =dem01.bbb();
		System.out.print(str+"1111");
}

注意事项

  1. 使用类中的方法或者属性之前,一定要先创建对象 先new。
  2. 对象中的属性和方法的调用 对象名.方法名/属性名
  3. 调用方法时传入方法的数据类型和顺序,都要跟定义方法时定义的参数数据类型和顺序完全一致。
  4. 方法的返回值类型根据自己的需求,看是否有返回值,如果没有返回值,就写void,如果有返回值,就写上与返回值数据类型相同的数据类型。
  5. 参数列表中不能有同名参数。
  6. 方法返回值的类型要大于等于 return 数据的类型;

四、方法的总结,重载,构造方法,

**静态方法可以使用.点来调用 但是和对象无关
虽然使用“引用.”来调用 但是实际还是重写前的方法
**
所有静态方法一般不用覆盖
因为方法覆盖不要和多态分开

4.1、方法的总结

方法的三要素:

​ 方法名

​ 返回值

​ 参数列表

​ 无参无返,无参有返,有参无返,有参有返。

方法应该定义在类(xxx.java)中,并且不能在方法中嵌套方法。
方法定义的前后顺序无所谓
方法定义之后不会执行,如果要执行,一定要调用
如果有返回值必须写return 返回值 必须有;
对于一个没有返回值的方法 return;可以用来结束方法
一个方法中可以有多个return,但同时被执行的只能有一个。 而且不能连写

 if(a>b){
    
    
	return a;
}else{
    
    
	return b;
}
    //判断两个数是否相同
    public boolean fff(int a,int b){
    
    
    if(a==b){
    
    
        return true;
    }else{
    
    
        return false;
    }
}
    public static void main(String[] args) {
    
    
        Test sc=new Test();
        boolean c=  sc.fff(23,34);
        System.out.println(c);
    }

4.2、重载

4.2.1、为什么需要方法?

在一个类中可以有很多的方法,并且每一个方法都有自己的功能,但是方法太多,对开发者不友好,名字太多不好记,所以使用方法重载,控制每一个方法中传入的参数,并且方法的名字都一样,java,会自动的根据传入参数的不同,调用参数相对应的方法。此时开发者不需要再记各种方法的名字了。非常nice !

4.2.2、什么是重载?

一个类中可以有很多个相同名字的方法,并且这些方法中参数列表不同(参数个数不同,顺序不同,类型不同),这就是方法重载。

通俗

在同一个作用域里面方法名相同但参数个数和数据类型标题的方法 方法重载

4.2.3、特点

1. 函数/方法名相同
2.参数列表不同(参数个数不同,顺序不同,参数类型不同)。
如果方法名相同,参数列表也相同,此时虚拟机就懵逼了,不能分辨到底调用哪一个方法。
3.**注意**:方法重载不考虑返回值。

案例

public class Person {
    
    
    /*求和
    * */
    public void getSum(int a, int b ){
    
    
        System.out.println(a+b);
    }
    /*求小数
    *
    * */
    public void  getSum(int a,float b){
    
    
        System.out.println(a+b);
    }
    /*求立方

    * */
    public void getSum(int a){
    
    
        System.out.println(a*a*a);
    }
     public static void main(String[] args) {
    
    
        Person mr=new Person();
        mr.getSum(5,5);
        mr.getSum(5,5.5f);
        mr.getSum(5);
    }
}

方法重载跟返回值没有关系。

此时,两个同名方法,参数列表相同,方法的返回值不同,此时编译器不能区分两个方法,直接报错。所以:方法重载不考虑返回值。

java内置的方法重载

方法名相同,参数列表不同

4.3、构造方法

4.3.1、什么是构造方法

构造方法 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

4.3.2、构造方法的声明

方法名跟类名要一致,没有返回值,也没有void
public 方法名(参数列表){

}
构造方法生成的快捷方式:

alt + insert

4.3.3、特点

1、构造方法也是一个特殊的方法,new的时候调用
2、构造方法的方法名跟类名一致
3、没有返回值 也不能写void
4、如果不写构造方法的话,系统会默认一个无参构造
但是只要写了一个构造方法 默认的就没有了

5、建议写有参构造的时候直接吧无参也自己写出来
推荐在定义类时,直接把有参和无参构造都写出来。
6、构造的作用就是创建对象/成员变量初始化:给属性赋值。如果显示赋值以系统显示赋值为主,如果 没有构造会默认赋值 引用类型就是默认为null 数字为0 boolean类型默认 false char “\u000”
7、构造方法可以重载:构造方法可以写很多个——方法重载(参数列表不同)

this
在这里插入图片描述

4.4、static

static 静态的 修饰关键词

4.4.1、作用

修饰变量和方法,{代码块}

  1. static 修饰变量叫 静态变量
  2. static 修饰方法叫 静态方法
  3. static 修饰的代码块 叫做静态代码块

4.4.2、特点

static 静态的地址是共享的

第一次加载类的时候开辟 (第一次看见类名加载这个类)此时空间就开辟了 与new对象无关
所有的静态(静态变量和静态方法)都属于类 (全局)。//静态的内存占用要小心谨慎
推荐用类名调用静态变量

  1. 实例方法:可以调用静态方法和静态变量,又可以调用成员方法和成员变量。
  2. 静态方法: 只能通过类名调用静态方法和静态变量。如果想调用非静态的需要通过new对象来调用。
  3. 调用静态变量和方法时可以使用类名直接调用,也可以使用new对象来调用
    但是推荐使用类名直接去调用。
    实例方法可以调用静态变量
    静态方法不能调用实例方法和实例变量。
    静态方法不能实例变量和实例方法

3.4.2Final关键字

看上一天的内容

final 修饰的是常量 不能更改的量。
常量的赋值可以同时赋值 也可以在先声明后赋值 但赋值只能付一次
在这里插入图片描述

局部变量
成员变量
参数变量

final ----局部变量
引用变量

成员变量------final
new的时候需要显示给变量名的赋值 ,避开默认值的赋值

4.5、包、权限修饰符


为什么要包

没有包类多的时候不好找,所以包的作用在于管理类。包在磁盘体现上就是文件夹。

不同包下的类可以重名(同一目录类不能重名) 可以通过包做一些限定

包的定义语句:package 包名;
跨包请求的时候需要导入包:import 包名.类名;导入指定类import 包名.*;

权限修饰符
public 公共的
主要修饰成员变量和方法 作用:权限的设置,保护属性不被外界侵犯。
在这里插入图片描述
public 公共的 类似 公共wc。 一个项目中都可以。
protected 受保护的 小区里的wc。
默认:default friendly
private 私有的 自己家的wc

猜你喜欢

转载自blog.csdn.net/qq_45438019/article/details/119374752