Java基础---面向对象---类与方法

1,面向过程与面向对象

面向过程:

优点:

代码直观,相对容易看出代码走向,我们是根据功能去直接开发,

自上而下

缺点:

代码的维护与扩展,再次利用比较困难

面向对象

优点:

代码易维护,相对易扩展,代码可复用率高

缺点:

代码的封装,与面向过程比较会稍微难看出一点走势

2,什么是面向对象

比如,我们希望在一个游戏中炸毁一颗星球

面向过程:

我们会考虑游戏中那颗星球的的一些引爆因素,那个星球的一些环境问题

主要围绕这颗星球进行

面向对象:

我们会考虑所有星球他存在的一些引爆因素,所有星球的一些环境问题

主要围绕星球整体

所以说:

面向过程,我们只会实现当前目标,如果把“这颗星球”替换成“那颗星球”此时我们需要重新操作

面向对象:我们只需要实现这一整套逻辑,无论是这颗星球还是那颗星球都可以当作参数去调用对应方法

3,面向对象

核心:类

两大核心

静态特征:属性,成员变量

4,类和对象

对象是类的实例

 理论来说,如果不做特别的约定,那么一个类可以实例化多个对象

5,声明一个类

Dog.java

public class Dog{
    //属性
    //狗名
    String dogName;
    //品种名
    String typeNaeme;
    //狗性别
    char dogSex;
}

Test.java

public static void main(String[] args){
		//实例化四只狗
    	Dog dog = new Dog();
    	Dog wangCai = new Dog();
    	Dog laiFu = new Dog();
    	Dog daHuang = new Dog();
    
    	//给地一只狗补充他的全部属性
    	dog.dogName="狗";
    	dog.dogSex="1";
    	dog.typeNaem="中华田园犬";
    	//给第二只狗补充它的属性
    	wangCai.dogName="旺财";
    	wangCai.typeName="柴犬";
    	//给第三只狗补充他的一个属性
    	laiFu.dogName="来福";
    	//不给第四只狗补充属性
    
    	//打印狗的名字
    	System.out.println(dog.dogName);
}

6,声明一个方法

//方法由
//访问修饰符【public/static/final】 返回类型【void无返回类型 引用数据类型-string/自定义类,基本数据类型-八大基本数据类型,方法名(参数) {方法体} 】

例如

public class Dog{
    //属性
   	//····
    
    //方法
    //犬吠
    //public为修饰符(访问修饰符)
    //void为返回类型(void是无返回类型)
    //返回类型如果是void,可以没有return(但是你也能写return,return的作用为结束当前的方法)
    //return和break不一样,break的作用在switch和循环中,是打破的意思,return是返回的意思
    //barking方法名--符合标识符命名规则,规则和变量基本相同,首字母要求小写,并且满足驼峰命名,
    //有意义
    //()内的为参数,这个方法是无参方法(没有参数的方法)
    //{}花括号为方法体,这个方法是输出一句话
    public void barking(){
        System.out.println("这只名叫"+dogName+"的狗发出了声音···");
        
        //将这个狗变成字符串,展示出它的属性
        //如果你的返回类型不为void,那么你这个方法一定要return,并且return的这个内容必须符合你的返回类型
        public String toString(){
            return "{dagName="+dogName+"typeName="+typeName+"dogSex="+(int)dogSex+"}";
        }
        //此方法会返回够的名字
        
        //dogName为这个类的一个属性,属性的类型为String和这个方法的返回类型一致
        public String getName(){
            return dogName;
        }
}
}

//方法的使用,两种情况
//同一个类中,可以直接调用,比如:
//print()调用show()方法不需要实例化Zoo对象

//不同类中调用一般方法,先实例化Zoo对象获得zoo之后使用zoo.print();进行调用

7,方法的参数:

1,1形参和实参

      

定义方法时:形式参数(形参)=》定义了方法参数的类型

调用方法时:实际参数(实参)=》值

1,2方法的参数

 

参数的类型可以是基本数据类型(八大基本数据类型)

也可以是引用数据类型(如String.Dog(自定义类)

1,3构造一个带有参数的方法

//构造
<访问修饰符>  返回类型 <方法名> (参数类型 参数1,参数类型 参数2,参数类型 参数3){
			//方法的主体
}

//调用
对象名,方法名(参数1,参数2,参数3)

1,4多个参数的实例

//方法:
  public int ChaRu(String []stuservice,String name){

        for (int i = 0; i < stuservice.length ; i++) {
            if(stuservice[i]==null){
                stuservice[i]=name;
                System.out.println("插入成功");
                return 1;
            }
        }
        System.out.println("数组已满,插入失败");
        return -1;
    }

    public int ChaXun(String []stuservice,String name,int start,int end){

        for (int i = start; i <=end ; i++) {
            if(name.equals(stuservice[i])){

                System.out.println("查询成功,姓名下标为" + i);
                return i;

            }
        }
        System.out.println("查询失败");
        return -1;


    }
//调用
 public static void main(String[] args) {
        Scanner input =new Scanner(System.in);
        String [] stuservice = new String[5];
        Zuoye01 stu = new Zuoye01();

        stuservice[0]="张三";
        stuservice[1]="李四";
        stuservice[2]="王五";

        System.out.println("按1进入插入功能");
        System.out.println("按2进入查询功能");


        while(true){
            System.out.println("请选择你要进入的功能");
            int flag = input.nextInt();
            if(flag==1){
                System.out.println("你已进入插入功能");
                System.out.println("请输入你要插入的姓名:");
                String name = input.next();
                 stu.ChaRu(stuservice,name);

            }
            if(flag==2){
                System.out.println("你已进入查询功能");
                System.out.println("请输入你要查询的姓名:");
                String name = input.next();;
                System.out.println("请输入起点:");
                int start = input.nextInt();
                System.out.println("请输入终点");
                int end = input.nextInt();

                  stu.ChaXun(stuservice,name,start,end);

            }
        }
   }

1,5不同参数类型在传递时的区别

基本数据类型传递只是单纯把值传递过去,在方法中,调用会调用值的变化,可是对于原本调用方的基本数据类型变量不会发生变化

引用数据类型(String除外,String非常特殊,在作为参数的情况下,情况等同于基本数据类型,但是一定要记住,String不是基本数据类型,他是一个引用数据类型,只不过他很特殊),在传递的情况下,是传递内存地址,由于传递了内存地址,所以你在方法体中进行数据修改,那么原本调用方的内存地址指向的结果跟着改变,从而导致会自动修改引用数据类型的值。

//方法:
package com.kgc.day10;

public class Test {
    public void calc1(int num){
        num+=1;
    }
    public void calc2(Student stu){
        stu.age+=1;
    }
    public void calc3(String str){
        str+="2";
    }
}
//调用
package com.kgc.day10;

public class Test02 {
    public static void main(String[] args){
        Test test = new Test();
        int n=8;
        test.calc1(n);
        Student stu = new Student();
        stu.age = 18;
        test.calc2(stu);
        String str = "1";
        test.calc3(str);
        System.out.println(n+"---"+stu.age+"---"+str);
        //结果为8----19----1
    }
}

cal2方法传递的是一个对象的引用类型

package com.kgc.day10;

public class Student {
    int age;
}

8,构造方法

public class Cat{
    String catName;
    
    public Cat(){
        System.our.println("你进入了Cat()的无参构造器(无参数构造方法)");
    }
    
    public Cat(String catName){
        System.out.println("你进入了Cat(String catName)的有参构造器(有参构造方法)");
        this.catName = catName;
        System.out.println("你将参数catName(“+catName+”)赋值给这个对象的catName这个属性");
    }
}
public static void main(String [] args){
    Cat cat = new Cat();
    Cat cat1 = new Cat("哆啦B梦");
    System.out.println(cat1.catName);
}

this关键字,this这个,指的是在一个类中用于声明这个标识符是标识的当前对象的属性,例如

public Cat(String catName){
    //这个this就代表,将参数catName赋值给当前对象(谁调用这个方法,谁就是当前对象)的对应属性
    this.catName = catName;
}

//有参构造器可以同时存在多个
//参数构造期可以同时存在多个参数
//有参构造器可以和无参构造器同时存在,只不过当你写了有参构造器,那么系统就不会自动生成无参构造器
public Cat(String catName,int catAge,char catSex){
    this.catName = catName;
    this.catAge = catAge;
    this,catSex = catSex;
}

this可以调用属性

System.out.println(this.catName);

this可以调用方法

this.catchMouse(mouse);

this可以调用构造方法

this();
this("Tom");

关于无参构造器

当你一个类写完没有写任何构造器的时候自动生成的一个构造器,如果当你这个构造器存在了任意(有参或无参)你新增的构造器,那么,系统自动生成的无参构造器将不会存在

所以,当你一个类如果存在了有参构造,你仍然在某些地方会用到他的无参构造器,那么你就需要将无参构造器手动重写,否则,将无法调用这个无参构造方法

例如:

 

此时发现其余地方

他的无参构造方法均报错了

9,方法重载

//同一个类中

//方法名相同

//参数个数或类型不同

//与返回值,返回修饰符无关

比如System.out.println()这个方法就是一个多次重载的方法,具体可以查看该代码源码

 

满足同一个类

方法名相同

参数个数不同

说明是println方法的重载

10,成员变量

局部变量的作用域仅限于定义它的方法

成员变量的作用域在整个类内部都是可见的

初始值不同

java会给成员变量一个初始值

java不会给局部变量赋予初始值

在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值