ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE第六章、面向对象(上)

2022-04-14 22:04:19  阅读:176  来源: 互联网

标签:int class 面向对象 参数 第六章 MyClass JavaSE 方法 public


JavaSE第六章、面向对象(上)

一、类与对象

  • 类是一个数据量类型,如:Cat类。

  • 类有属性,有行为。

  • 对象就是一个具体的实例,如:老王的猫、老李的猫……

  • 从猫类到对象,目前有几种说法:1.创建一个对象2.实例化一个对象……

public class test{
    public static void main(String[] args){
    	Cat cat1=new Cat();	//创建一个猫,并赋给Cat1.
    	cat1.name="小白";
    	cat1.age=1;
    	cat1.color="白色";
    	
    	System.out.println(cat1.name+" "+cat1.age+" "+cat1.color);
    }
}

class Cat{
    String name;
    int age;
    String color;
}

二、成员方法

修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;

}

public void cal(){
}
//public:公共类
//void:无返回值
//cal:方法名
//()内:形参列表
//{}内:方法体

方法调用

Java 支持两种调用方法的方式,根据方法是否返回值来选择。

  • 当方法返回一个值的时候,方法调用通常被当做一个值。

    eg:int larger = max(30, 40);

  • 如果方法返回值是void,方法调用一定是一条语句。

    System.out.println("欢迎访问菜鸟教程!");

通过值传递参数

  • 调用一个方法时候需要提供参数,你必须按照参数列表指定的顺序提供。

  • 方法被调用后,实参的值并没有改变。

**递归调用 ***

//猴子吃桃问题
public class oop {
    public static void main(String[] args) {
        T t=new T();
        System.out.println(t.peach(1));
    }
}

class T{
    public int peach(int n) {
        if(n==10){
            return 1;
        }else if(n>=1 && n<=9){
            return ( peach(n+1)+1)*2;
        }else{
            System.out.println("无效日期");
            return -1;
        }
    }
}
//汉诺塔
public class HanoiTower {
    public static void main(String[] args){
        Tower tower=new Tower();
        tower.move(5,'A','B','C');
    }
}

class Tower{
    public void move(int num, char a, char b, char c){
        //若只有一个盘 num=1
        if(num == 1){
            System.out.println(a+"->"+c);
        }else{
            //若有多个盘,一律视为两个整体,最下面的盘(1)和上面的所有盘(num-1)
            //1.移动上面的盘 a->c->b
            move(num-1,a,c,b);
            //2.最下面的盘a->c
            System.out.println(a+"->"+c);
            //3.b上的所有盘b->a->c
            move(num-1,b,a,c);
        }
    }
}

三、overload

  • 一个类的两个方法拥有相同的名字,但是有不同的参数列表。Java编译器根据方法签名判断哪个方法应该被调用。

  • 重载的方法必须拥有不同的参数列表。不能仅仅依据修饰符或者返回类型的不同来重载方法。

四、可变参数

  • 参数数量可变

  • 将同一个类中多个同名同功能参数个数不同的方法,封装成一个方法。

typeName... parameterName

在方法声明中,在指定参数类型后加一个省略号(...) 。

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,个数可以是(0~n)。任何普通的参数必须在它之前声明。
  • 使用可变参数时,可以当作数组来使用。(可变参数的本质就是数组)
public int sum(int... nums){
    System.out.println("nums.length");
    int res=0;
    for(int i=0;i<nums.length;i++){
        res+=nums[i];
    }
    return res;
}

五、作用域

  • 方法内定义的变量被称为局部变量。

  • 局部变量的作用范围从声明开始,直到包含它的块结束。

  • 方法的参数范围涵盖整个方法。参数实际上是一个局部变量。

注意事项

  • 全局变量/属性可以加修饰符
  • 局部变量不可以加修饰符

六、构造器/构造方法

  • 当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值

  • 通常会使用构造方法给一个类的实例变量赋初值

  • Java 自动提供了一个默认构造方法,默认构造方法的访问修饰符和类的访问修饰符相同。一旦你定义了自己的构造方法,默认构造方法就会失效

// 一个简单的构造函数
class MyClass {
  int x;
 
  // 以下是构造函数
  MyClass() {
    x = 10;
  }
}

public class test {
   public static void main(String[] args) {
      MyClass t1 = new MyClass();
      MyClass t2 = new MyClass();
      System.out.println(t1.x + " " + t2.x);
      //输出:10 10
   }
}
// 一个简单的构造函数
class MyClass {
  int x;
 
  // 以下是构造函数(有参数的构造方法)
  MyClass(int i ) {
    x = i;
  }
}

public class ConsDemo {
  public static void main(String[] args) {
    MyClass t1 = new MyClass( 10 );
    MyClass t2 = new MyClass( 20 );
    System.out.println(t1.x + " " + t2.x);
    //输出:10 20
  }
}

七、this

java虚拟机给每个对象分配this,代表当前对象。

访问成员方法的语法:this.方法名(参数列表);
访问构造器的语法:this(参数列表);⚠️只能在构造器内使用(即只能再构造器中访问另外一个构造器,且必须放在第一条语句。)

注意事项

  • this可以访问本类的属性、方法、构造器
  • this用于区分当前类的属性和局部变量
  • this不能在类定义的外部使用,只能在类定义的方法中使用

继承中会有更多this的细节。

//小练习:比较两个人是不是同一个人
public class thisTest {
    public static void main(String[] args) {
        Person p1 = new Person("mary", 28);
        Person p2 = new Person("tom", 18);
        System.out.println(p1.compare(p2));
    }
}

class Person{
    String name;
    int age;

    public Person(String name, int age){
        this.name=name;
        this.age=age;
    }

    public boolean compare(Person p){
        return this.name.equals(p.name) && this.age==p.age;
    }
}

标签:int,class,面向对象,参数,第六章,MyClass,JavaSE,方法,public
来源: https://www.cnblogs.com/CathyWong/p/16146723.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有