Unit02-OOP-对象和类,数组(下)    

1.方法的签名: 方法名+参数列表

2.方法的重载(Overload):
  1)发生在一个类中,方法名称相同,参数列表不同
  2)编译器在编译时自动根据签名绑定调用不同的方法

3.构造方法:
  1)常常给成员变量赋初值
  2)与类同名,没有返回值类型
  3)在创建(new)对象时被自动调用
  4)若自己不写构造方法,则编译器默认一个无参构造方法,
    若自己写了构造方法,则编译器不再默认提供
  5)构造方法可以重载

4.this:指代当前对象,哪个对象调指的就是哪个对象
       只能用在方法中,方法中访问成员变量之前默认都有个this.
  this的用法:
    1)this.成员变量名------访问成员变量
    2)this.方法名()--------调用方法
    3)this()---------------调用构造方法

5.引用类型数组:
  1)Cell[] cells = new Cell[4]; //创建格子数组对象
    cells[0] = new Cell(2,5); //创建格子对象
    cells[1] = new Cell(2,6);
    cells[2] = new Cell(2,7);
    cells[3] = new Cell(3,6);
  2)Cell[] cells = new Cell[]{
      new Cell(2,5),
      new Cell(2,6),
      new Cell(2,7),
      new Cell(3,6)
    };
  3)int[][] arr = new int[3][];
    arr[0] = new int[2];
    arr[1] = new int[3];
    arr[2] = new int[2];
    arr[1][0] = 100; //arr中第2个元素中的第1个元素赋值为100
  4)int[][] arr = new int[3][4]; //3行4列
    for(int i=0;i<arr.length;i++){
      for(int j=0;j<arr[i].length;j++){
        arr[i][j] = 100;
      }
    }

嵌套数组:
3为arr的长度
4为arr中每个元素的长度

int[][] arr = new int[3][4]; //3行4列
for(int i=0;i<arr.length;i++){
  for(int j=0;j<arr[i].length;j++){
    arr[i][j] = 100;
  }
}

i=1
  j=0 arr10
  j=1 arr11
  j=2 arr12
  j=3 arr13

//声明整型数组的数组arr,包含3个元素
//每个元素都是int[]型,默认值为null
int[][] arr   = new int[3][];
arr[0] = new int[4];
arr[1] = new int[4];
arr[2] = new int[4];
//给arr中第2个元素中的第1个元素赋值为100
arr[1][0] = 100;

arr-----------------int[][]
arr[0]--------------int[]
arr[0][0]-----------int

//声明整型数组arr,包含4个元素
//每个元素都是int类型,默认值为0
int[] arr = new int[4];

//声明Cell型数组cells,包含4个元素
//每个元素都是Cell型,默认值为null
Cell[] cells = new Cell[4];

//声明Student数组stus,包含26个元素
//每个元素都是Student型,默认值为null
Student[] stus = new Student[26];

一个类,肯定有构造方法-----对
自己可不可以不写构造-------可以
                            写了更方便
成员变量:
class Student{
  String name;
  int age;
  String address;
  Student(){
  }
  //给成员变量赋初值
  Student(String name1,int age1,String address1){
    name = name1;
    age = age1;
    address = address1;
  }
}

基本类型数组

引用类型数组

演示方法的重载

  1. package oo.day02;
  2. /*
  3. * 补充:
  4. * 1.一个文件中可以包含多个类
  5. * 2.public修饰的类只能有一个
  6. * 3.public修饰的类必须与文件名相同
  7. */
  8. //演示方法的重载
  9. public class OverloadDemo {
  10. public static void main(String[] args) {
  11. Aoo o = new Aoo();
  12. o.say();
  13. o.say("zhangsan");
  14. o.say("zhangsan", 25);
  15. o.say(25, "zhangsan");
  16. }
  17. }
  18.  
  19. class Aoo{
  20. void say(){}
  21. void say(String name){}
  22. void say(String name,int age){}
  23. void say(int age,String name){}
  24.  
  25. //int say(){return 1;} //编译错误,重载与返回值类型无关
  26. //void say(String address){} //编译错误,重载与参数名称无关
  27. }

//引用类型数组

  1. package oo.day02;
  2. //引用类型数组
  3. public class RefArrayDemo {
  4. public static void main(String[] args) {
  5. Cell[] cells = new Cell[4]; //创建格子数组对象
  6. cells[0] = new Cell(2,5); //创建格子对象
  7. cells[1] = new Cell(2,6);
  8. cells[2] = new Cell(2,7);
  9. cells[3] = new Cell(3,6);
  10.  
  11. Cell[] cs = new Cell[]{
  12. new Cell(2,5),
  13. new Cell(2,6),
  14. new Cell(2,7),
  15. new Cell(3,6)
  16. };
  17.  
  18. int[][] arr = new int[3][];
  19. arr[0] = new int[2];
  20. arr[1] = new int[3];
  21. arr[2] = new int[2];
  22. arr[1][0] = 100; //给arr中第2个元素中的第1个元素赋值为100
  23.  
  24. int[][] as = new int[3][4]; //3行4列
  25. for(int i=0;i<as.length;i++){
  26. for(int j=0;j<as[i].length;j++){
  27. as[i][j] = 100;
  28. }
  29. }
  30.  
  31. }
  32. }

程序一:

Cell.java //格子类,演示构造方法

  1. package oo.day02;
  2.  
  3. public class Cell {
  4. int row; //声明行
  5. int col; //声明列
  6. Cell(){ //构造方法,默认值
  7. this(0,0);
  8. }
  9. Cell(int n){ //构造方法,默认值
  10. this(n,n);
  11. }
  12. Cell(int row,int col){ //构造方法,取值,赋值
  13. this.row = row;
  14. this.col = col;
  15. }
  16.  
  17. void drop(){ //下落一格
  18. row++; //行号增1
  19. }
  20. void drop(int n){ // 下降n格
  21. row+=n;
  22. }
  23. void moveLeft() { // 左移1格
  24. col--;
  25. }
  26. void moveLeft(int n){ // 左移n格
  27. col -=n;
  28. }
  29. String getCellInfo(){
  30. return row+","+col;
  31. }
  32. }

CellTest.java   //格子类的测试类

  1. package oo.day02;
  2. //格子类的测试类
  3. public class CellTest {
  4. public static void main(String[] args) {
  5. //构建方法
  6. Cell c1 = new Cell(); //0,0
  7. System.out.println("---0------0-----");
  8. printWall(c1);
  9. Cell c2 = new Cell(2); //2,2
  10. System.out.println("---2------2-----");
  11. printWall(c2);
  12. Cell c3 = new Cell(2,5); //2,5
  13. System.out.println("---2------5-----");
  14. printWall(c3);
  15.  
  16. /*
  17. 方法一(不建议使用):
  18. Cell c = new Cell();
  19. c.row = 2;
  20. c.col = 6;
  21. c.drop();
  22. c.drop(3);
  23. c.moveLeft();
  24. c.moveLeft(3);
  25. */
  26. }
  27.  
  28. //打墙+打格
  29. public static void printWall(Cell cc){
  30. for(int i=0;i<20;i++){ //行
  31. for(int j=0;j<10;j++){ //列
  32. if(i==cc.row && j==cc.col){ //行列匹配
  33. System.out.print("* ");
  34. }else{
  35. System.out.print("- ");
  36. }
  37. }
  38. System.out.println(); //换行
  39. }
  40. }
  41. }

程序二:

Cell.java 

  1. package oo.day02;
  2. //格子类
  3. public class Cell {
  4. int row; // 行号
  5. int col; // 列号
  6. Cell(){
  7. this(0,0);
  8. }
  9. Cell(int n){
  10. this(n,n);
  11. }
  12. Cell(int row,int col){
  13. this.row = row;
  14. this.col = col;
  15. }
  16.  
  17. String getCellInfo() { // 获取格子的行号和列号
  18. return row + "," + col; // 返回行列号
  19. }
  20. }

T.java

  1. package oo.day02;
  2. //T型
  3. public class T {
  4. Cell[] cells; //格子数组
  5. T(){
  6. this(0,0);
  7. }
  8. T(int row,int col){
  9. this.cells = new Cell[4]; //创建格子数组对象
  10. this.cells[0] = new Cell(row,col); //创建格子对象
  11. this.cells[1] = new Cell(row,col+1);
  12. this.cells[2] = new Cell(row,col+2);
  13. this.cells[3] = new Cell(row+1,col+1);
  14. }
  15.  
  16. void drop(){ //下落
  17. for(int i=0;i<this.cells.length;i++){
  18. this.cells[i].row++;
  19. }
  20. }
  21. void moveLeft(){ //左移
  22. for(int i=0;i<cells.length;i++){
  23. cells[i].col--;
  24. }
  25. }
  26. void moveRight(){ //右移
  27. for(int i=0;i<cells.length;i++){
  28. cells[i].col++;
  29. }
  30. }
  31. void print(){ //输出4个格子的行列号
  32. for(int i=0;i<this.cells.length;i++){
  33. String str = this.cells[i].getCellInfo();
  34. System.out.println(str);
  35. }
  36. }
  37. }

J.java

  1. package oo.day02;
  2. //J型
  3. public class J {
  4. Cell[] cells;
  5. J(){
  6. this(0,0);
  7. }
  8. J(int row,int col){
  9. cells = new Cell[4];
  10. cells[0] = new Cell(row,col);
  11. cells[1] = new Cell(row,col+1);
  12. cells[2] = new Cell(row,col+2);
  13. cells[3] = new Cell(row+1,col+2);
  14. }
  15.  
  16. void drop(){ //下落
  17. for(int i=0;i<cells.length;i++){
  18. cells[i].row++;
  19. }
  20. }
  21. void moveLeft(){ //左移
  22. for(int i=0;i<cells.length;i++){
  23. cells[i].col--;
  24. }
  25. }
  26. void moveRight(){ //右移
  27. for(int i=0;i<cells.length;i++){
  28. cells[i].col++;
  29. }
  30. }
  31. void print(){ //输出4个格子的行列号
  32. for(int i=0;i<cells.length;i++){
  33. String str = cells[i].getCellInfo();
  34. System.out.println(str);
  35. }
  36. }
  37. }

TJTest.java

  1. package oo.day02;
  2. //T类与J类的测试类
  3. public class TJTest {
  4. public static void main(String[] args) {
  5. T t = new T(2,5);
  6. t.print();
  7.  
  8. t.drop();
  9. System.out.println("下落后:");
  10. t.print();
  11.  
  12. t.moveLeft();
  13. System.out.println("左移后:");
  14. t.print();
  15. }
  16. }

课后作业:

1 请描述下列代码的运行结果

  1. public class ExerciseTest {
  2. public static void main(String[] args){
  3. ExerciseTest f = new ExerciseTest();
  4. System.out.println(f.add("4", "5"));
  5. }
  6.  
  7. public int add(int x, int y) {
  8. return x + y;
  9. }
  10. public String add(String x,String y) {
  11. return x + y;
  12. }
  13. }

参考答案

上述代码运行后,将打印显示 45。这是因为,调用 add 方法时,传入的是 String 类型的变量,因此,执行第二个 add 方法,实现字符串的连接,得到字符串“45”。

2 关于构造方法,下面说法正确的是

A.构造方法不能带有参数

B.构造方法的名称必须和类名相同

C.构造方法可以定义返回值

D.构造方法不能重载

参考答案

B 选项的说法正确。

在Java语言中,可以通过构造方法实现对对象成员变量的初始化。构造方法是在类中定义的方法,但不同于其他的方法,构造方法的定义有如下规则:

1. 构造方法的名称必须与类名同名;

2. 构造方法没有返回值,但也不能写void,如果有返回值就是方法了。

另外,为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称,方法的参数不同,称之为构造方法的重载。在创建对象时,Java编译器会根据不同的参数调用不同构造方法。

Unit02-OOP-对象和类,数组(下)的更多相关文章

  1. js之数组,对象,类数组对象

    许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...

  2. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  3. JavaScript 浅析数组对象与类数组对象

    数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...

  4. [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

    示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ...

  5. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    原文地址 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型, ...

  6. javascript:类数组 -- 对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象  的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...

  7. JavaScript中的类数组对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 一般来说,如果我们有一个对象obj和一个数组a: obj["attr1"];    / ...

  8. 浅谈js的类数组对象arguments

    类数组对象:arguments总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的 ...

  9. JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组

    一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...

  10. Javascript 类数组(Array-like)对象

    Javascript中的类数组对象(Array-like object)指的是一些看起来像数组但又不是数组的对象.Javascript中的arguments变量.document.getElement ...

随机推荐

  1. List<子类>转List<父类>遇到的问题

    public class A{ } public class B extends A { } 一个方法中如下定义: public List<A> funName(List<A> ...

  2. 【POJ】2151 Check the difficulty of problems

    http://poj.org/problem?id=2151 题意:T个队伍M条题目,给出每个队伍i的每题能ac的概率p[i][j],求所有队伍至少A掉1题且冠军至少A掉N题的概率(T<=100 ...

  3. 【CodeVS】p1174 靶形数独

    题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士 ...

  4. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  5. 【bzoj1367】[Baltic2004]sequence

    2016-05-31 17:31:26 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1367 题解:http://www.cnblogs.co ...

  6. 转:DataGridView列的宽度、行的高度自动调整

    注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...

  7. 【原创】windows下搭建vue开发环境+IIS部署

    [原创]win10下搭建vue开发环境  如果要转发,请注明原作者和原产地,谢谢! 特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图:     详细的安 ...

  8. js判断微信浏览器

    function is_weixin(){ //检查是否是微信浏览器 var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMes ...

  9. sql2008 r2 重新启动 失败解决办法

    一.问题描述: 在计算机中安装sql_server_2008_R2,安装前执行检查时,提示重启计算机失败.重启计算机后,再执行检查仍然提示这个错误. 二.解决方案: 1.在开始->运行中输入re ...

  10. 关于VS打包程序无法弹出主界面的问题

    代码中的程序很正常,VS打包之后,无法弹出主界面的问题. 这种问题,一般是缺少程序加载所必须的东西,包括dll,配置文件等. (1)程序主界面使用的是DevExpress,DevExpress的相关类 ...