【Java】面向对象程序设计 课程笔记 语法基础

🚀Write In Front🚀
📝个人主页:令夏二十三
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:Java
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊

目录

1. 面向对象程序设计

1.1 对象 object

1.2 类 class

1.3 面向对象的三大特性

1.4 Java开发

2. 第一个Java程序

2.1 Java程序的基本构成

2.2 JDK的文件组成

2.3 Hello World

2.4 输入输出

2.4.1 使用Scanner类

2.4.2 使用int及out

输入输出字符

输入输出行

 输入输出数字

3. 数据运算、流控制和数组

3.1 数据类型、变量与常量

3.1.1 数据类型

数据类型的划分

基本类型和引用类型的差别

Java基本数据类型

逻辑型

字符型

转义符

整型

浮点型

标识符

3.2 运算符与表达式

3.3 流程控制语句

3.3.1 程序的注释

3.3.2 分支语句

3.3.3 循环语句

3.4 数组

3.4.1 数组概述

3.4.2 数组的初始化

静态初始化

默认初始化

3.4.3 数组元素的引用

3.4.4 增强的for语句

3.4.5 复制数组

3.4.6 多维数组


1. 面向对象程序设计

1.1 对象 object

在现实世界中:是客观世界中的一个实体

在计算机世界中:是一个可标识的存储区域

1.2 类 class

具有共同属性和行为的对象集合,属性指的是变量,行为指的是方法。

类是对象的模板,对象是类的实例(对象实例):

1.3 面向对象的三大特性

封装性:程序定义很多类,将属性和行为封装在类中,这样就可以将类的细节部分隐藏起来,用户只通过受保护的接口访问某个类。

继承性:子类可以继承父类的属性和方法,便于进行分类。

多态性:不同对象调用一个同名的方法可以产生不同的效果,效果由各自对于这个方法的定义所决定。

class Animal {
    public void makeSound() {
        System.out.println("Animal is making a sound");
    }
}

class Cat extends Animal {
    public void makeSound() {
        System.out.println("Meow");
    }
}

class Dog extends Animal {
    public void makeSound() {
        System.out.println("Woof");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Animal animal1 = new Cat();
        Animal animal2 = new Dog();

        animal1.makeSound();  // 输出 "Meow"
        animal2.makeSound();  // 输出 "Woof"
    }
}

1.4 Java开发

java的开发工具是JDK。

java的开发环境是JRE,JRE包括JVM和API。

java中的class文件中包含的不是实际机器的CPU指令。

2. 第一个Java程序

2.1 Java程序的基本构成

2.2 JDK的文件组成

2.3 Hello World

public class HelloWolrd {//创建一个类
    public static void main(String[] args){//创建main方法,相当于C里的main函数
        System.out.print("Hello,world!");//print不换行,println换行
    }
}

2.4 输入输出

2.4.1 使用Scanner类

package Week_5;
import java.util.Scanner; //使用Scanner类
public class IOlearning{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int a = scanner.nextInt();
        /*
        这里使用nextInt()方法接收一个整数的输入;
        还可以使用nextDouble()方法接收实数的输入;
        使用next()方法接收下一个单词的输入。
         */
        System.out.printf("%d的平方是%d\n", a, a * a);
        /*
        这里的printf使用方法类似于C语言,可以在输出中插入数据;
         */
    }
}

2.4.2 使用int及out

这里要注意try-catch语句的格式。

输入输出字符
package Week_5;
import java.io.*; //使用IO包
public class Inout {
    public static void main(String[] args){
        char c = ' ';
        System.out.print("please input a char:");
        try{ //要用try语句,声明是试图输入这个数,不一定符合输入规则
            c = (char) System.in.read();
        }catch(IOException e){} //catch语句表明记录IO错误
        System.out.println("You have entered:"+c);
    }
}
输入输出行
package Week_5;
import java.io.*;
public class Inoutline {
    public static void main(String[] args){
        String s = " ";
        try{ //新建一个行输入的缓冲方法,缓冲方法里再新建一个输入流读取方法,这样就可以读取一整行的输入
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            s = in.readLine(); //记住这个读取行的方法后面的Line要大写
        }catch(IOException e){}
        System.out.println(s);
    }
}
 输入输出数字
package Week_5;
import java.io.*;
public class Inoutnumber {
    public static void main(String[] args){
        String s = " ";
        int n = 0;
        try{
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Please input an int: ");
            s = in.readLine();
            n = Integer.parseInt(s); //加了个转换方法
        }catch(IOException e){}
        System.out.print("You have input "+n);
    }
}

3. 数据运算、流控制和数组

3.1 数据类型、变量与常量

3.1.1 数据类型

数据类型的划分

基本类型和引用类型的差别

实际上,基本类型的数据是直接存储在对应的栈里的,而引用类型的数据在栈里只存储了其地址,真正的数据存放地是地址所指向的堆,类似于C里的指针。

Java基本数据类型

基本数据类型的自动提升

byte -> short -> int -> long -> float -> double

char -> int

数据类型强制转换和C++一样,注意进行强制类型转换时不能超出表数范围即可。

逻辑型

字符型

转义符

整型

浮点型

标识符

3.2 运算符与表达式

算术运算符:*    /    %    +    -

关于 / :运算对象都为整数,则为整除;运算对象有浮点数,则为实数除法。

算术赋值符:+=    -=    *=    /=    %=

关系运算符:>    >=    <    <=    ==     !=

字符串连接符:+

一元运算符:++     --

三目运算符:A?B:C

逻辑运算符:&    |    ^    !    

记住 ^ 不是乘方,而是异或,只有两个对象不同,真值才是true!

短路运算符:&&    ||

&&:第一个操作数为假则不判断第二个操作数

||:第一个操作数为真则不判断第二个操作数(和C++里的一样)

移位运算符:只能用于byte,short,int,long

移位方式表达式含义
符号右移num>>nnum/2^n
无符号右移num>>>n
符号左移num<<nnum*2^n

3.3 流程控制语句

3.3.1 程序的注释

3.3.2 分支语句

if-else语句和switch语句,和C++一模一样。

if-else分支语句代码示例如下,这里做了一个简单的分数评价程序:

package Week_5;
import java.io.*;
public class Controlif {
    public static void main(String[] args){
        int n = 0;
        String s = " ";
        System.out.print("Please enter your score: ");
        try{
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            s = in.readLine();
            n = Integer.parseInt(s);
        }catch(IOException e){}
        if (n > 100 | n < 0)
            System.out.print("Wrong Score!");
        else if (n >= 90)
            System.out.print("Excellent!");
        else if (n >= 80)
            System.out.print("Standout!");
        else if (n >= 60)
            System.out.print("Good!");
        else
            System.out.print("Come on!");
    }
}

switch分支语句代码示例如下,这是一个简单的加减乘除计算器:

package Week_5;
import java.io.*;
import java.util.*;
public class Controlswitch {
    public static void main(String[] args){
        int a = 0, b = 0, c = 0;
        System.out.print("Please enter two numbers: ");
        Scanner scanner = new Scanner(System.in);
        a = scanner.nextInt();
        b = scanner.nextInt();
        System.out.println("Please choose your compute method: 1. add  2. minus  3. multiplication  4. division");
        c = scanner.nextInt();
        switch(c){
            case 1:
                System.out.printf("%d + %d = %d", a, b, a + b);
                break;
            case 2:
                System.out.printf("%d - %d = %d", a, b, a - b);
                break;
            case 3:
                System.out.printf("%d * %d = %d", a, b, a * b);
                break;
            case 4:
                System.out.printf("%d / %d = %d", a, b, a / b);
                break;
            default:
                System.out.print("Wrong enter!");
        }
    }
}

3.3.3 循环语句

同C++完全一样,分为for循环语句、while循环语句和do-while循环语句。

for循环语句代码示例如下,这是一个求阶乘的简单程序:

package Week_5;
import java.util.*;
public class Controlfor {
    public static void main(String[] args){
        int n = 0, ans = 1;
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        for (int i = 1; i <= n; i++) {
            ans *= i;
        }
        System.out.print(ans);
    }
}

while循环语句代码示例如下,这是一个求阶乘之和的简单程序:

package Week_5;
import java.util.*;
public class Controlwhile {
    public static void main(String[] args){
        int n = 0, ans = 0;
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        while (n > 0) {
            ans += n * n;
            n--;
        }
        System.out.print(ans);
    }
}

3.4 数组

3.4.1 数组概述

数组,顾名思义,是多个相同类型数据的组合。

一维数组的声明方式如下:

    int[] a;
    double []b;
    boolean c[];

可以看出,方括号可以贴近数组变量名,也可以贴近数组名;可以写到变量名的前面,也可以写到变量名的后面。

3.4.2 数组的初始化

数组的声明和初始化可以写在同一句里,声明完后可以对数组元素赋值:

        int[] a = new int[5];
        a[0] = 3;
        a[1] = 6;
        a[2] = 9;

但是,在Java里,声明数组时不能指定其长度,也就是直接写出数组元素的个数,这样是不符合规则的,因为在Java里,数组只是引用类型,声明之后只是在栈上取一个地方存数组真正存放数据的堆的地址。

静态初始化

可以不new,这样就默认new一个堆来放数组元素:

        double []b = {1.2, 3.4, 5.6,}; // 最后多一个逗号没问题
        double []c = new double[]{1.1, 2.2, 3.3, 4.4, 5.5};
默认初始化

数组一经分配空间,其中的每个元素就会被隐式初始化,例如初始化一个整形数组,其中每个元素都被初始化为0。

3.4.3 数组元素的引用

数组元素的方式和C++一致,都是使用从0到n-1的下标来引用。

不同的是,在Java里,每个数组都有一个属性length指明它的长度,在使用for循环遍历数组的时候可以使用length来表示数组长度:

        int []ages = new int[10];
        for (int i = 0; i < ages.length; i++)
            System.out.println(ages[i]);

3.4.4 增强的for语句

增强的for语句和python里的类似,但是这种语句在Java里是只读式遍历,不能进行赋值等其他操作:

        int[] years = new int[10];
        for (int year : years)  // 这里的冒号可以看作python里的in,表示取数组里的每个元素
            System.out.println(year);

3.4.5 复制数组

Java里的System.arraycopy方法提供了数组元素复制的功能:

        //原数组,复制的来源
        int[] source = {1, 2, 3, 4, 5, 6,};
        //目标数组,复制的目的地
        int[] dest = {1, 1, 1, 1, 1, 1, };
        // 复制方法,括号中的格式为(来源数组,来源数组的复制起点,目标数组,目标数组的接收起点,复制的元素个数)
        System.arraycopy(source, 0, dest, 1, source.length - 1);

3.4.6 多维数组

二维数组是数组的数组,对二维数组及以上的多维数组的声明和初始化应该按照从高维到低维的顺序进行。

二维数组的初始化:

    int[][] a = {{1,2,3}, {4,5,6}, {7,8,9}};

3.4.7 数组中的continue语句

下面是一个使用continue语句跳转的代码示例:

package Week_5;

public class Array_test2 {
    public static void main(String[] args){
        int a[] = new int[7];
        for (int i = 0; i < a.length; i++){
            one_num: //为内层循环里的continue设置一个跳转的地方,否则它只会跳过对它来说最近的循环
                while(true){
                    a[i] = (int) (Math.random()*36) + 1;
                    for (int j = 0; j < i; j++){
                        if (a[i] == a[j])
                            continue one_num;
                    }
                    break;
                }
                for (int num : a)
                    System.out.print(num + " ");
                System.out.println();
        }

补充:随机数生成

Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值

公式:Math.random()*(n-m)+m,生成大于等于m小于n的随机数;

例如:定义一个随机1到5(取不到5)的变量 [1,5)

int number=(int)(Math.random()*(5-1)+1);
int number = (int)(Math.random()*4+1);取值正好是[1,5)

4. 课内代码笔记

1. stringDemo

将字符串转换为数字:

int n = Integer.parseInt(s);

将数字转换为字符串:

String s = String.valueOf(n);

2. ComputeArea

输入的初始化和关闭:

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();
double m = scanner.nextDouble();
String s = scanner.nextLine();

scanner.close();

3. TestSwitch

switch语句的选择条件也可以是字符串,然后只需要把每一个case从数字改为不同的字符串即可;

注意每个case都要有break,最后要有default。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面向对象程序设计第三版耿祥义第一章主要介绍了Java基础知识和面向对象的概念。 1. Java语言的特点 Java语言是一种面向对象的编程语言,具有以下特点: - 简单易学:Java语言语法类似C++,但是去掉了C++中比较难理解的特性,使得Java更加容易学习和使用。 - 面向对象Java语言是一种纯面向对象的编程语言,所有的程序都是由对象组成的。 - 平台无关性:Java语言可以在不同的操作系统和硬件平台上运行,只需要安装相应的Java虚拟机即可。 - 安全性:Java语言的安全性非常高,可以在不信任的环境下运行程序,避免了一些安全漏洞。 - 高性能:Java语言的运行速度比较快,且可以通过各种优化技术来提高性能。 2. 面向对象的概念 面向对象是一种软件设计的思想,其核心是将问题看作是由对象组成的。对象是指具有一定属性和行为的实体,属性是对象的特征,行为是对象的动作。 在面向对象的设计中,需要考虑以下几个方面: - 类的设计:类是创建对象的模板,需要定义类的属性和方法。 - 对象的创建:创建对象时,需要使用new关键字来调用类的构造方法。 - 对象的访问:访问对象的属性和方法时,需要使用点号操作符来进行访问。 - 继承和多态:继承是指一个类可以继承另一个类的属性和方法,多态是指同一种行为可以用不同的方式实现。 3. Java基础知识 Java语言基础知识包括数据类型、运算符、流程控制语句等。 - 数据类型:Java语言的数据类型包括基本数据类型和引用数据类型。基本数据类型包括整型、浮点型、字符型和布尔型,引用数据类型包括类、接口、数组等。 - 运算符:Java语言的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符等。 - 流程控制语句:Java语言的流程控制语句包括if语句、switch语句、for循环、while循环、do-while循环等。 4. Java程序的基本结构 Java程序的基本结构包括类的定义、方法的定义和语句块的定义。 - 类的定义:类是Java程序的基本组成单元,需要使用class关键字来定义类。 - 方法的定义:方法是类中的一个函数,用于实现特定的功能,需要使用方法名、参数列表和返回值类型来定义方法。 - 语句块的定义:语句块是一组语句的集合,需要使用大括号来定义语句块。 总的来说,Java面向对象程序设计第三版耿祥义第一章介绍了Java语言基础知识和面向对象的概念,为后续的学习打下了基础

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值