java学习笔记(不定时更新~)

学习Java目前建议的书籍:《21天学通java》、《30天学通Java项目案例开发》>、《Java核心技术 卷I》、《Java核心思想》

学习J2EE方面的知识:《21天学通JavaWeb开发》、《30天学通JAVAWEB项目开发》(均为电子工业出版社出版图书)

目前在看的书籍为《疯狂Java讲义》——电子工业出版社的

第三章 数组

3.1 数组的基础知识

动态初始化: 数组的声明创建与数组的赋值操作分开进行

​ 元素的下标可以是整型常量或整型表达式:数组名【元素下标】=元素值;

​ 动态初始化实例:int [] scores = new int[5];
动态初始化只指定数组的长度,且系统为每个数组元素指定初始值。动态初始化的语法格式如下:

arrayName = new type[length];

以下为一个数组动态化的实际编程案例

//计算班级的平均分
import java.util.*;

public class test {
    public static void main(String[] args) {
        int [] score = new int[5];
        int sum = 0;			//成绩总和
        Scanner input  = new Scanner(System.in);
        System.out.println("请输入五名同学的成绩:");
        for(int i=0;i<score.length;i++) {		//注意定义代码的可复用性
            score[i] = input.nextInt();
            sum+=score[i];
        }
        double avg = (double)sum / score.length;
        System.out.println("The average score is:"+avg);

    }
}

  • 使用数组常见的错误:
  • int[] score = new int[]; //编译出错,没有指明数组的维度
  • 数组越界问题

3.2 数组排序

问题:循环录入5位学员的成绩,进行升序排列后输出结果

​ java提供了很多工具类,例如:

​ Arrays.sort(数组名); //Arrays类的sort()方法:对数组进行升序排列

​ 更多常见的数组方法见下图:

在这里插入图片描述

注意:比较两个数组是否相等不能用==,要用equals方法,Java中==比较的是地址,结果一定为false

常使用的方法:sort、equals、binarySearch

3.4 二维数组的声明

二维数组的声明类型:

  • 数组类型 数组名【】【】
  • 数组类型【】【】 数组名
  • 数组类型【】 数组名【】

二维数组的创建

​ 数组名 = new 数据元素类型【行数】【列数】;

​ 数组名 = new 数据元素类型【行数】【】;

注意:必须声明行的个数!!! 行的数量不可缺省,会产生语法错误

//二维数组的动态初始化
int[][] a = new int[3][];

a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[4];

​ 重点:二维数组的动态定义、二维数组的内外层循环方法

章节案例:用二维数组模拟五子棋游戏
//未添加判断输赢的规则,将会在之后完善并发出
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Gobang {
    //定义棋盘的大小
    private static int BOARD_SIZE = 15;

    //定义一个二维数组来充当棋盘
    private String [][] board;

    public void initBoard(){
        //初始化棋盘空间
        board = new String[BOARD_SIZE][BOARD_SIZE];

        for(int i=0;i<BOARD_SIZE;i++){
            for (int j=0;j<BOARD_SIZE;j++){
                board[i][j] = "+";
            }
        }
    }

    //在控制台输出棋盘的方法
    public void printBoard(){
        //打印每一个数组元素
        for(int i=0;i<BOARD_SIZE;i++){
            for (int j=0;j<BOARD_SIZE;j++){
                System.out.print(board[i][j]);
            }
            System.out.println();
        }
    }

    public static void main(String[] args) throws Exception{
        Gobang gb = new Gobang();

        gb.initBoard();
        gb.printBoard();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String inputStr = null;

        while((inputStr = br.readLine()) != null){
            String [] postStrArr = inputStr.split(",");

            int xPos = Integer.parseInt(postStrArr[0]);
            int yPos = Integer.parseInt(postStrArr[1]);

            gb.board[xPos-1][yPos-1] = "·";

            gb.printBoard();
            System.out.println("请输入您下棋的坐标,应该以x,y的格式输入:");
        }
    }
}

第四章 在线订餐系统

代码内容后续将单独以博客的形式推出,敬请期待~

第五章 类和对象

5.1 类和对象的定义

​ 面向对象的思想(OOP,Object Oriented Programming)的三个特征

  • 封装
  • 继承
  • 多态

​ 类的定义:修饰符一般为public,也可以没有修饰符

​ 注意类名的命名规范。类名一般大写。

​ 类的成员:

​ 成员变量(属性)、成员函数(方法)

​ 通过 “.”调用属性和方法

5.2 创建类和对象

问题:一个景区根据游人的年龄收取不同价格的门票。请编写游人类,根据年龄段决定能够购买的门票价格并输出

5.3 类的方法

​ 构造方法

  • 具有与类相同的名称
  • 不含返回值类型
  • 不能在方法中用return语句返回一个值
  • 一般访问权限位public

​ 在一个类中,具有上述特征的我们就可以成为对象方法

​ 构造方法的作用:

  • 完成对象的创建,即完成对象的实例化
  • 一般使用构造方法来完成对成员变量的初始化

对象的创建

语法格式:

​ 类名 对象名 = new 构造函数

示例:Employee zhang = new Employee()

方法的重载(overload)

​ 函数的重载就是在同一个类中允许同时存在一个以上同名的函数

方法重载的规则

  • 函数名称相同
  • 函数的参数必须不同(参数个数不同 或 参数类型不同)
  • 函数的返回值类型可以相同,也可以不同

5.4 类的属性

变量的作用域

​ 全局变量

​ 类体中声明的成员变量为全局变量

​ 全局变量在类的整个生命周期中都有效

​ 局部变量

​ 方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量

​ 局部变量只在方法调用的过程中有效,方法调用结束后失效

5.5 类的封装

面向对象三大特征之一 ——封装

封装的概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

​ 数据是存储的内容,而方法是对这样的数据的一个操控。

​ 封装的好处:隐藏类的实现细节、方便加入控制语句、方便修改实现、只能通过规定方法访问数据

封装的步骤:修改属性的可见性->创建共有的getter和setter方法(使用Eclipse软件即可对类中的方法添加重构)->在getter和setter方法中加入属性控制语句(对属性值的合法性进行判断)
在这里插入图片描述

第六章 继承

6.1 定义继承关系

子类继承父类使用的是extends to关键字,在子类中重定义父类中的构造函数的方法为:

class PersonalDept extends DepartMent{
    //子类对父类的继承关系
}

public PersonalDept(String name,String manager,String responsibility,int count){
    super(name,manager,responsibility);
    this.count = count;
}

使用super函数即可调用父类中的构造函数方法,然后继续增加子类中的声明内容即可;

  • 在Java中定义一个类时,让该类通过关键字extends继承一个已有的类
  • 被继承的类称为父类(超类、基类),新的类称为子类(派生类)
  • 子类继承父类的所有属性、方法,同时也可以增加自己的属性和方法

6.2 类方法的重写

继承的规则:

​ Java中只支持单继承,也就是说每个类只能有一个父类,不允许有多重继承

​ 一个父类可以有多个子类

​ 子类继承父类的所有属性方法,但不继承父类的**构造方法 **,要用super关键字调用父类的构造方法。

class Dog extends Pet{
    //子类特有的属性和方法
}

子类访问父类成员

  • 访问父类构造方法

    super();		//在子类构造方法中调用,且必须是第一句
    super(name);
    
  • 访问父类属性

super.name();
  • 访问父类方法
super.print();

子类在重写父类的方法时要在上一行加上@Override

@Override
public void printDetail(){
    super.printDetail();
    System.out.println("本月计划招聘人数:"+count);
}

方法的覆盖(override)【Java中的写法: @Override】

· 重写(rewrite)

· 对从父类中继承来的方法进行改造

· 在子类继承父类的时候发生

注意覆盖(override 父类和子类)和重载(overload 在同一个类)是不一样的

方法覆盖的规则:

在子类中的覆盖方法与父类中被覆盖的方法应具有

​ 相同的方法名

​ 相同的参数列表(参数数量、参数类型、参数顺序都要相同)

​ 相同的返回值类型

​ 子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限

6.3 Object类

​ Object类是所有类的父类

第七章 多态

7.1 多态的实现

多态意味着在一次方法调用中根据包含的对象的实际类型(即实际的子类对象)来决定应该调用哪个方法,而不是由用来存储对象引用的变量来决定的。当调用一个方法时,为了实现多态的操作,这个方法既是在父类中声明的方法,也必须是在子类中重写过的方法。

public class Test{
    public static void main(String[] args){
        Pet pet;
        pet = new DOg();
        pet.toHospital();		//狗狗看病
        
        pet = new Bird();
        pet.toHospptal();		//小鸟看病
    }
}

按照上述方式书写代码存在的问题:会造成代码冗余、工作量大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值