Unit02-OOP-对象和类,数组(下)
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;
  }
}
基本类型数组

引用类型数组

演示方法的重载
package oo.day02;
/*
* 补充:
* 1.一个文件中可以包含多个类
* 2.public修饰的类只能有一个
* 3.public修饰的类必须与文件名相同
*/
//演示方法的重载
public class OverloadDemo {
public static void main(String[] args) {
Aoo o = new Aoo();
o.say();
o.say("zhangsan");
o.say("zhangsan", 25);
o.say(25, "zhangsan");
}
} class Aoo{
void say(){}
void say(String name){}
void say(String name,int age){}
void say(int age,String name){} //int say(){return 1;} //编译错误,重载与返回值类型无关
//void say(String address){} //编译错误,重载与参数名称无关
}
//引用类型数组
package oo.day02;
//引用类型数组
public class RefArrayDemo {
public static void main(String[] args) {
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); Cell[] cs = new Cell[]{
new Cell(2,5),
new Cell(2,6),
new Cell(2,7),
new Cell(3,6)
}; 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 int[][] as = new int[3][4]; //3行4列
for(int i=0;i<as.length;i++){
for(int j=0;j<as[i].length;j++){
as[i][j] = 100;
}
} }
}
程序一:
Cell.java //格子类,演示构造方法
package oo.day02;
public class Cell {
    int row;        //声明行
    int col;        //声明列
    Cell(){            //构造方法,默认值
        this(0,0);
    }
    Cell(int n){    //构造方法,默认值
        this(n,n);
    }
    Cell(int row,int col){    //构造方法,取值,赋值
        this.row = row;
        this.col = col;
    }
    void drop(){            //下落一格
        row++;                //行号增1
    }
    void drop(int n){        // 下降n格
        row+=n;
    }
    void moveLeft() { // 左移1格
        col--;
    }
    void moveLeft(int n){    // 左移n格
        col -=n;
    }
    String getCellInfo(){
        return row+","+col;
    }
}
CellTest.java //格子类的测试类
package oo.day02;
//格子类的测试类
public class CellTest {
public static void main(String[] args) {
//构建方法
Cell c1 = new Cell(); //0,0
System.out.println("---0------0-----");
printWall(c1);
Cell c2 = new Cell(2); //2,2
System.out.println("---2------2-----");
printWall(c2);
Cell c3 = new Cell(2,5); //2,5
System.out.println("---2------5-----");
printWall(c3); /*
方法一(不建议使用):
Cell c = new Cell();
c.row = 2;
c.col = 6;
c.drop();
c.drop(3);
c.moveLeft();
c.moveLeft(3);
*/
} //打墙+打格
public static void printWall(Cell cc){
for(int i=0;i<20;i++){ //行
for(int j=0;j<10;j++){ //列
if(i==cc.row && j==cc.col){ //行列匹配
System.out.print("* ");
}else{
System.out.print("- ");
}
}
System.out.println(); //换行
}
}
}
程序二:
Cell.java  
package oo.day02;
//格子类
public class Cell {
int row; // 行号
int col; // 列号
Cell(){
this(0,0);
}
Cell(int n){
this(n,n);
}
Cell(int row,int col){
this.row = row;
this.col = col;
} String getCellInfo() { // 获取格子的行号和列号
return row + "," + col; // 返回行列号
}
}
T.java
package oo.day02;
//T型
public class T {
Cell[] cells; //格子数组
T(){
this(0,0);
}
T(int row,int col){
this.cells = new Cell[4]; //创建格子数组对象
this.cells[0] = new Cell(row,col); //创建格子对象
this.cells[1] = new Cell(row,col+1);
this.cells[2] = new Cell(row,col+2);
this.cells[3] = new Cell(row+1,col+1);
} void drop(){ //下落
for(int i=0;i<this.cells.length;i++){
this.cells[i].row++;
}
}
void moveLeft(){ //左移
for(int i=0;i<cells.length;i++){
cells[i].col--;
}
}
void moveRight(){ //右移
for(int i=0;i<cells.length;i++){
cells[i].col++;
}
}
void print(){ //输出4个格子的行列号
for(int i=0;i<this.cells.length;i++){
String str = this.cells[i].getCellInfo();
System.out.println(str);
}
}
}
J.java
package oo.day02;
//J型
public class J {
Cell[] cells;
J(){
this(0,0);
}
J(int row,int col){
cells = new Cell[4];
cells[0] = new Cell(row,col);
cells[1] = new Cell(row,col+1);
cells[2] = new Cell(row,col+2);
cells[3] = new Cell(row+1,col+2);
} void drop(){ //下落
for(int i=0;i<cells.length;i++){
cells[i].row++;
}
}
void moveLeft(){ //左移
for(int i=0;i<cells.length;i++){
cells[i].col--;
}
}
void moveRight(){ //右移
for(int i=0;i<cells.length;i++){
cells[i].col++;
}
}
void print(){ //输出4个格子的行列号
for(int i=0;i<cells.length;i++){
String str = cells[i].getCellInfo();
System.out.println(str);
}
}
}
TJTest.java
package oo.day02;
//T类与J类的测试类
public class TJTest {
public static void main(String[] args) {
T t = new T(2,5);
t.print(); t.drop();
System.out.println("下落后:");
t.print(); t.moveLeft();
System.out.println("左移后:");
t.print();
}
}
课后作业:
1 请描述下列代码的运行结果
    public class ExerciseTest {
        public static void main(String[] args){
            ExerciseTest f = new ExerciseTest();
            System.out.println(f.add("4", "5"));
        }
         public int add(int x, int y) {
             return x + y;
        }
        public String add(String x,String y) {
            return x + y;
        }
    }
参考答案
上述代码运行后,将打印显示 45。这是因为,调用 add 方法时,传入的是 String 类型的变量,因此,执行第二个 add 方法,实现字符串的连接,得到字符串“45”。
2 关于构造方法,下面说法正确的是
A.构造方法不能带有参数
B.构造方法的名称必须和类名相同
C.构造方法可以定义返回值
D.构造方法不能重载
参考答案
B 选项的说法正确。
在Java语言中,可以通过构造方法实现对对象成员变量的初始化。构造方法是在类中定义的方法,但不同于其他的方法,构造方法的定义有如下规则:
1. 构造方法的名称必须与类名同名;
2. 构造方法没有返回值,但也不能写void,如果有返回值就是方法了。
另外,为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称,方法的参数不同,称之为构造方法的重载。在创建对象时,Java编译器会根据不同的参数调用不同构造方法。
Unit02-OOP-对象和类,数组(下)的更多相关文章
- js之数组,对象,类数组对象
		许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ... 
- 简述JavaScript对象、数组对象与类数组对象
		问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ... 
- JavaScript 浅析数组对象与类数组对象
		数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ... 
- [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象
		示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ... 
- JS中集合对象(Array、Map、Set)及类数组对象的使用与对比
		原文地址 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型, ... 
- javascript:类数组 -- 对象
		在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象 的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ... 
- JavaScript中的类数组对象
		在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 一般来说,如果我们有一个对象obj和一个数组a: obj["attr1"]; / ... 
- 浅谈js的类数组对象arguments
		类数组对象:arguments总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的 ... 
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组
		一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ... 
- Javascript 类数组(Array-like)对象
		Javascript中的类数组对象(Array-like object)指的是一些看起来像数组但又不是数组的对象.Javascript中的arguments变量.document.getElement ... 
随机推荐
- php  从myslql里导出到excel
			//导出excel 只wps可以打开public function takexcelAction(){ $name = $this->input->get_post('name'); $i ... 
- [转]七天学会NodeJS
			转:http://nqdeng.github.io/7-days-nodejs/ NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS, ... 
- Coder-Strike 2014 - Finals (online edition, Div. 2) B. Start Up
			需要满足的条件是 (1)每个字母是对称的 (2)每个字符串是对称的 #include <iostream> #include <algorithm> #include < ... 
- 【BZOJ】1104: [POI2007]洪水pow
			题意 给一个\(n * m(1 \le n, m \le 1000)\)的矩阵,如果\(a_{i, j}\)为正表示城市.\(|a_{i, j}|(|a_{i, j}| \le 1000)\)是格子\ ... 
- 【HDU】1847 Good Luck in CET-4 Everybody!
			http://acm.hdu.edu.cn/showproblem.php?pid=1847 题意:同nim..不过只有一堆..每次取2的幂次..即1.2.4....等,n<=1000 #inc ... 
- 透过现象看现象(SQL501N错误处理)
			某日一直运行比较正常的报表系统,突然报存储过程执行失败,查看DB2 错误返回码为sql501n,查看此错误原因如下: [db2inst1@limt ~]$ db2 ? sql501n SQL0501N ... 
- bug: 在使用HMSegmentedControl时,设置selectionIndicatorEdgeInsets对左右边界没有用
			若设置了 self.tabSegmented.selectionStyle = HMSegmentedControlSelectionStyleFullWidthStripe; 则必须使用sel ... 
- java 反取字符串
			public class demo2 { /** * 2 : 将字符串反取出来 新中国好 好国中新 */ public static void main(String[] args) { String ... 
- awesome-scala
			https://github.com/lauris/awesome-scala Awesome Scala A community driven list of useful Scala libra ... 
- JCreator的配置
			1.在Configure(配置)菜单上选择Options(选项),将弹出对话框. 2.在Option对话框中选择左侧JDK Profile,选择右侧JDK version 1.x.x.. ,点击Edi ... 
