面向对象编程

面象过程&面向对象

面象过程(线型思维)

    1.步骤清晰简单,第一步做什么,第二步做什么

  2.面向过程适合处理一些较为简单的问题

面向对象思想(分类思维)

  物以类聚,分类的思维模式,思考问题首先会解决问题需要那些分类,再将这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。

  面向对象适合处理复杂的问题,适合处理需要多人协作的问题!

 

什么是面向对象

  面向对象编程(OOP)

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

  抽象

三大特性

  封装

  继承

  多态

从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象

从代码运行角度考虑是先有类后有对象。类是对象的模板

方法的回顾及加深:

  方法的定义:

      修饰符、 返回类型 

      break和return的区别:break跳出switch,结束循环。

      注意:return后面不能带任何语句,因为return代表方法结束,而且returm的返回值,要和方法的返回值型一致

      方法名:注意规范就可以,见名知意的原则

      参数列表:(参数类型,参数名),...可变长参数

      异常抛出:

复制代码
修饰符、 返回类型
//
HelloWorld 类 public class HelloWorld { //main 方法 public static void main(String []args) { } /** 修饰符 返回值类型 方法名(){ //方法体 return 返回值;
  注意:return后面不能带任何语句,因为return代表方法结束,而且returm的返回值,要和方法的返回值型一致 }
*/ public String say(){ return "hello"; } }
复制代码

方法的调用:

      静态方法、非静态方法、形参和实参、值传递和引用传递、this关键字

      

复制代码
静态方法、非静态方法
public
class Main { public static void main(String []args) { //如果是调用别的类中的静态方法,那就直接用类名.方法进行调用即可 Stud.she(); //使用类名.方法调用非静态方法 //提示:无法从静态上下文引用非静态方法 she1 //Stud.she1(); //正确非静态方法的调用
       //对象的类型 对象的名字 =对象的值 Stud d=new Stud();//创建类对象 d.she1();//使用对象名称.方法进行调用 } } class Stud{
//注意:当两个方法都为静态或非静态是,他们之间是可以互相调用的,如果一个为静态一个为非静态时,他们之间不能互相调用,因为他们的加载时间片不一样
//静态方法:和类一起加载的 public static void she(){ System.out.println("说话了"); } //非静态方法:类实例化之后才存在 public void she1(){ System.out.println("讲话了"); } }
复制代码
复制代码
//形参和实参
public class HelloWorld {

    public static void main(String []args) {
        //实际参数和形式参数的类型保持一致即可,因为形式参数只是他们的名字,而实际参数才是他们真实的值
       int add=add(1,2);//传入实际参数
        System.out.println(add);//打印返回的值
    }
    
    public static int add(int a,int b){//方法中的参数为形式参数,不论我在这个参数列表里写什么参数都可以,只我传进来的实际参数类型和他保持一致就可以
    return a+b;
    
    }
}
复制代码
复制代码
public class HelloWorld {
    //引用传递
    public static void main(String []args) {
      int a =1;
        System.out.println(a);//1
        upd(a);//因为他只是把值传给了方法,在方法中他的值为10,但是方法并没有把值返回来,所以以他的结果还是为1
        System.out.println(a);//1
    }
    //返回值为空
    public static void upd(int a){
    a=10;
    }
}
复制代码

 

复制代码
public class Main {

    //引用传递:一般传递的是一个对象,本质还是值传递
    public static void main(String []args) {
           Stud stud=new Stud();
        System.out.println(stud.name);//unll
        Main.upd(stud);
        System.out.println(stud.name);//月亮
    }
    public static void upd(Stud stud){
    //stud是一个对象:那个指向的是      Stud stud=new Stud();,所以可以改变
      stud.name="月亮";
    }
}
//定义了一个Stud类,有一个属性:name
class Stud{
String name;
    }
复制代码

 

 


类写对象的关系:

  创建与初始化对象

    使用new关键字创建对象

    使用new关键字创建对象,除了分配内存之外,还会给创建好的对象,默认初始化以及对类中的构造器的调用

    类中的构造器也叫构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:

      1.必须和类的名字相同

      2.必须没有返回类型,也不能写void

 示例:

public class Hlee {
    public Hlee(){}//默认无参构造器,一个类即使什么都不写都会有一个构造器
    public Hlee(int a,int b){}//有参构造器
    public static void main(String []args) {
       
    }
}

注:一个项目只有一个主启动类,所以在创建每个类时,不要直接创建main方法 

 

复制代码
public class Main {
    public static void main(String[] args) {
  //类:抽象,实例化
  //类实例化后会返回一个自己的对象
  //su对象就是Sube类的具体实例
    Sube su=new Sube();
   
   //给实例对象进行赋值
   su.name="小白";
   su.age=3;
   System.out.println(su.name);
   System.out.println(su.age);
   
    }
    
    
    }

class Sube{
//属性、字段

String name;//null
int age;//0


//方法
public void sub(){
System.out.println(this.name+"在学习");//this.name表示:Sube类中的nmae传入的内容

}


}

复制代码

 

构造器详解:

复制代码
public class Main {
    public static void main(String[] args) {
        Suba sub=new Suba();
        System.out.println(sub.name);
    }
}

class Suba{
String name;
//实例化初始值,让在其他地方new个Suba对象是,直接对象.name时输出的值为构造器中的值
//1.使用new关键字,本质是在调用构造器
//2.构造器一般用来初始化值
public Suba(){
this.name="小白";//this.name表示当前对象的name属性
}
//有参构造:一但定义了有参构造,无参构造就必须显示定义
public Suba(String name){
this.name=name;

}

}
复制代码

总结:

复制代码
构造器:
1.和类名相同
2.没有返回值
作用:
1.new本质在调用构造方法
2.初始化对象的值
注意点:
一但定义了有参构造,无参构造就必须显示定义,否则会报错
快捷键:
    ALL+LNSERT :快速创建构造器
复制代码

 

posted @   hollg  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示