【cs61b】学习笔记day1

news2024/11/25 15:47:58

1.1 java基础

Hello World

  • java程序由一个类声明组成,使用关键字public class声明。在Java中,所有代码都位于类中。

  • 运行的代码在一个名为main的方法中,该方法被声明为public static void main(String[] args)。

  • 我们使用大括号{}表示一段代码的开始和结束。语句必须以分号结束

运行java程序

执行Java程序最常见的方法是通过两个.program的序列运行它。第一个是Java编译器,或javac。第二个是Java解释器(Java)。
在这里插入图片描述

变量和循环

  • 所有的变量必须在使用之前声明,并且必须给它一个指定类型,而且这个类型在后面的程序中不可改变,类型在代码运行前就被验证
  • 循环定义包含在花括号内,测试的布尔表达式包含在圆括号内。
  • 我们的print语句只是System.out.print而不是System.out.println。这意味着我们不应该包括换行符(return)。
  • print语句将一个数字添加到空格中。这样可以确保数字不会相互碰撞。
  • 在这些特性中,最重要的一个是 声明一个有指定类型的变量。

静态类型

Java最重要的特性之一是所有变量和表达式都有一个称为静态类型。
Java变量可以包含这种类型的值,而且只能包含这种类型的值。
此外,变量的类型永远不能改变。
Java编译器的关键特性之一是它执行静态类型检查。

静态类型具有以下优点:

  • 编译器确保所有类型都是兼容的,使程序员更容易调试他们的代码。
  • 由于代码保证没有类型错误,编译程序的用户永远不会遇到类型错误。例如,Android应用程序是用Java编写的,并且通常只以.class文件的形式分发,即以编译格式分发。因此,这样的应用程序永远不会因为类型错误而崩溃,因为编译器已经检查过它们了。
  • 每个变量、参数和函数都有声明的类型,使程序员更容易理解和推理代码。
    在Java中,我们可以说System.out.println (5 + " ");
    但是在Python中,我们不能说print(5+“horse”)为什么会这样呢?
    考虑这两个Java语句:
String h = 5 + "horse";
int h = 5 + "horse";

第一个会成功,第二个将给出一个编译器错误。由于Java是强类型的,如果您告诉它h是一个字符串,它可以将元素连接起来并给您一个字符串。但是当h是int型时,它不能把一个数字和一个字符串连接起来然后给你一个数字。
Python不限制类型,也不能假设你想要什么类型。x =5 +“horse”应该是一个数字吗?一个字符串?Python不知道。所以它出错了。

函数定义

在Python等语言中,函数可以在任何地方声明,甚至可以在函数外部声明。
在java中,不能在外面定义一个函数,所有的函数必须是类的一部分,类中的函数成为方法,所以在java中所有的函数都是方法。
函数的所有参数必须有声明的类型,Java中的函数只能返回一个值

好的编程风格的一些最重要的特征是:

  • 一致的风格(空格、变量命名、大括号风格等)
  • 大小(行不要太宽,源文件不要太长)
  • 描述性命名(变量、函数、类),例如变量或函数的名称为year或getUserName,而不是x或f。
  • 避免重复代码:除了一些更改之外,您几乎不应该有两个重要的代码块几乎相同。
  • 在适当的地方注释。Java中的行注释使用//分隔符。块(也就是多行注释)注释使用/* 和 */。
    黄金法则是:编写代码时要让陌生人也能很容易理解。

break & continue

  • continue语句跳过循环当前迭代的其余部分,有效地直接跳转到增量条件。
  • break关键字在调用时完全终止最内层循环。

1.2 定义和使用类

静态 & 非静态方法

静态方法

Java中的所有代码都必须是类的一部分(或类似于类的东西,我们将在后面学习)。大多数代码都是在方法内部编写的。
让我们考虑一个例子:

public class Dog {
    public static void makeNoise() {
        System.out.println("Bark!");
    }
}

如果尝试运行Dog类,我们只会得到一条错误消息:

$ java Dog
Error: Main method not found in class Dog, please define the main method as:
       public static void main(String[] args)

我们定义的Dog类不做任何事情。我们简单地定义了狗狗可以做的事情,即制造噪音。要实际运行这个类,我们要么需要向Dog类添加一个主方法。或者我们可以创建一个单独的DogLauncher类来运行来自Dog类的方法。例如,

public class DogLauncher {
    public static void main(String[] args) {
        Dog.makeNoise();
    }
}

实例变量和对象实例化

一些关键的观察和术语:

  • Java中的对象是任何类的实例。
  • Dog类有自己的变量,也称为实例变量或非静态变量。这些变量必须在类中声明,这与Python或Matlab等语言不同,这些语言可以在运行时添加新变量。
  • 我们在Dog类中创建的方法没有static关键字。我们称这种方法为实例方法或非静态方法。
  • 要调用makeNoise方法,我们必须首先使用new关键字实例化Dog,然后使特定的Dog吠叫。换句话说,我们调用d.makeNoise()代替Dog.makeNoise()
  • 对象实例化后,可以将其赋值给已声明的适当类型的变量,例如d = new Dog();
  • 类的变量和方法也称为类的成员。
  • 使用点表示法访问类的成员。

Java构造函数

构造函数,实例化是参数化的,从而节省了我们手动输入许多实例变量赋值的时间和混乱。

public class DogLauncher {
    public static void main(String[] args) {
        Dog d = new Dog(20);
        d.makeNoise();
    }
}

类方法和实例方法

Java允许定义两种类型的方法:

  • 类方法,也就是静态方法。
  • 实例方法,也就是非静态方法。

实例方法是只能由类的特定实例执行的操作。静态方法是类本身采取的操作。两者在不同的情况下都是有用的。作为静态方法的一个示例,Math类提供了一个sqrt方法。因为它是静态的,我们可以这样调用它:

x = Math.sqrt(100);

如果sqrt是一个实例方法,我们就会得到下面这种的语法。

Math m = new Math();
x = m.sqrt(100);

有时,一个类同时具有实例方法和静态方法是有意义的。例如,假设想要比较两只狗的能力。
一种方法是添加一个静态方法来比较Dogs。

public static Dog maxDog(Dog d1, Dog d2) {
    if (d1.weightInPounds > d2.weightInPounds) {
        return d1;
    }
    return d2;
}
//此方法可以通过以下方式调用:
Dog d = new Dog(15);
Dog d2 = new Dog(100);
Dog.maxDog(d, d2);

另一种方法是添加一个非静态方法来比较Dogs。

public Dog maxDog(Dog d2) {
    if (this.weightInPounds > d2.weightInPounds) {
        return this;
    }
    return d2;
}
//调用方式:
Dog d = new Dog(15);
Dog d2 = new Dog(100);
d.maxDog(d2);

用类名调用的是静态方法,用具体实例变量调用的是非静态方法

//test
public static Dog maxDog(Dog d1, Dog d2) {
    if (weightInPounds > d2.weightInPounds) {
        return this;
    }
    return d2;
}

静态变量

类拥有静态变量有时是有用的。这些静态属性是类本身固有的,而不是实例固有的。
例如,我们可能会记录狗的学名(或双名)是“Canis familiaris”:

public class Dog {
    public int weightInPounds;
    public static String binomen = "Canis familiaris";
    ...
}

静态变量应该使用类的名称来访问,而不是使用特定的实例,例如,你应该使用Dog.binomen, 不是 d.binomen。虽然Java在技术上允许您使用实例名访问静态变量,但这是一种糟糕的风格。

/** 
< 10:yip

< 30:
bark

>=30:
woof
*/

public class DogLoop {
    public static void main(String[] args) {
   		Dog smallDog = new Dog(5);
   		Dog mediumDog = new Dog(25);
   		Dog hugeDog = new Dog(150);
 
   		Dog[] manyDogs = new Dog[4];  
        manyDogs[0] = smallDog;
   		manyDogs[1] = hugeDog;    	   
        manyDogs[2] = new Dog(130);
 
   		int i = 0;
   		while (i < manyDogs.length) {
       		Dog.maxDog(manyDogs[i], mediumDog).makeNoise();
       		i = i + 1;
        }
    }
}
/**输出:
bark!
woof
woof
错误
*/

public static void main(String[] args)

有了到目前为止学到的知识,现在是时候揭开我们一直用于main方法的声明的神秘面纱了。把它分成几个部分,

  • public:到目前为止,我们所有的方法都以这个关键字开头。
  • static:它是一个静态方法,不与任何特定的实例相关联。void:没有返回类型。
  • main:方法的名称。
  • String[] args:这是传递给main方法的参数。
  • 命令行参数由于main是由Java解释器本身而不是另一个Java类调用的,所以提供这些参数是解释器的工作。它们通常引用命令行参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/782589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中TodoList案例_添加

与上一篇Vue中TodoList案例_初始化列表有四个文件变化了 安装nanoid库&#xff1a; npm i nanoid App.vue <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHeader :addTodo"…

Guitar Pro 8.1官方中文解锁版功能介绍及下载安装激活教程

Guitar Pro 8.1官方中文解锁版是一款由法国Arobas Music公司开发的吉他学习与MIDI音序制作辅助软件&#xff0c;它具有丰富的功能&#xff0c;包括吉他谱、六线谱、四线谱绘制、打印、查看、试听等方面&#xff0c;能够帮助音乐爱好者更方便地进行音乐学习和创作。Guitar Pro 8…

<Java物联网> 从主动到被动:Java中的BACnet设备属性查询

目录 BACnet 使用软件 资源 模拟器 使用Java主动查 引入maven 创建网络对象 获取远程设备 获取设备属性 使用DeviceEventAdapter订阅 初始化本地BACnet设备和IP网络配置&#xff1a; 启动本地设备和添加监听器&#xff1a; 搜寻远程设备&#xff1a; 发送订阅COV报…

Ansible自动化运维学习——综合练习

目录 (一)练习一 1.新建一个role——app 2.创建文件 3.删除之前安装的httpd服务和apache用户 4.准备tasks任务 (1)创建组group.yml (2)创建用户user.yml (3)安装程序yum.yml (4)修改模板httpd.conf.j2 (5)编写templ.yml (6)编写start.yml (7)编写copyfile.yml (8…

leetcode 46. 全排列

2023.7.23 目前位置回溯系列已经接触过 组合、分割、子集&#xff0c;本题是新类型&#xff1a;排列。排列的最大特点是&#xff1a;各集合有序&#xff0c;所以元素可以重复使用&#xff0c;因此不需要使用start了&#xff1b;需要使用一个used数组记录path中存在哪些元素了&a…

Unity-数据持久化-JSON

一、JsonUtlity JsonUtlity 是 Unity 自带的用于解析 Json 的公共类。它可以 将内存中对象序列化为 Json 格式的字符串 将 Json 字符串反序列化为类对象 1.在文件中存读字符串 using System.IO;// 1.存储字符串到指定路径文件中 // 第一个参数&#xff1a;填写的是 存储的…

四层和七层负载均衡详解

1 概述 四层负载均衡就是工作在计算机网络OSI七层分层的第四层&#xff08;传输层&#xff09;的&#xff0c;七层负载军和则是工作在第七层&#xff08;应用层&#xff09;的。即四层负载均衡是基于IP端口的负载均衡&#xff0c;七层负载均衡是基于URL等应用层信息的负载均衡…

Mysql数据库基本语句

1.数据库操作基本流程 ◼ 连接登陆数据库 ◼ 创建数据库 ◼ 创建数据表 ◼ 插入数据记录 ◼ 断开连接 连接 MySQL 数据库的命令语法格式&#xff1a; mysql [ -h 服务器 IP 或域名 -u 用户名 -p 密码 数据库名称 ]quit 或者 exit 退出数据库 注意事项&#xff1a; 操作指令…

力扣奇遇记 [第一章]

文章目录 &#x1f626;第一题&#xff1a;拿下LeetCode1769. 移动所有球到每个盒子所需的最小操作数学习内容&#xff1a;LeetCode1769. 移动所有球到每个盒子所需的最小操作数&#x1f648;思路分析&#xff1a;&#x1f496;代码产出&#xff1a; &#x1f626;第二题&#…

网络安全 Day16-计算机网络知识01

计算机网络知识01 1. 什么是网络2. 网络分类3. 网卡4. 网线5. MAC地址 1. 什么是网络 局域网&#xff08;私有网&#xff09;图片 路由器作用&#xff1a;隔离网络帮人选择最佳路径。内网地址就是网关。外网地址就是公网地址。 2. 网络分类 局域网&#xff1a;本地私有的一…

leetcode:1313. 解压缩编码列表(python3解法)

难度&#xff1a;简单 给你一个以行程长度编码压缩的整数列表 nums 。 考虑每对相邻的两个元素 [freq, val] [nums[2*i], nums[2*i1]] &#xff08;其中 i > 0 &#xff09;&#xff0c;每一对都表示解压后子列表中有 freq 个值为 val 的元素&#xff0c;你需要从左到右连接…

12.3.3 Shell script 的默认变量($0, $1...)

举例来说&#xff0c;如果你想要重新启动系统的网络&#xff0c;可以这样做&#xff1a; script 是怎么达成这个功能的呢&#xff1f;其实 script 针对参数已经有设置好一些变量名称了&#xff01;对应如下&#xff1a; 执行的脚本文件名为 $0 这个变量&#xff0c;第一个接的参…

AOP操作日志记录(将增、删、改相关接口的操作日志记录到数据库表中)

1.1 需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0c;需要详细的操作日志&#xff0c;并保存在数据表中&#xff0c;便于后期数据追踪。 操作日志信息包含&#xff1a;…

mac电脑清理系统占用空间清理优化操作教程

mac系统广受用户的喜爱和信赖。但是&#xff0c;很多mac用户可能会发现&#xff0c;随着使用时间的增长&#xff0c;mac系统占用的空间越来越大&#xff0c;导致电脑运行缓慢&#xff0c;甚至出现磁盘空间不足的提示。那么&#xff0c;mac系统内存为什么那么大&#xff1f;mac清…

解析国产音频数模转换芯片的应用领域

数模转换器是用于数模转换的设备。数字信号定义为时间离散和幅度信号离散。同时,将模拟信号定义为时间连续和连续幅度信号。数模转换器将定点二进制数字(适当的抽象精度数字)转换为物理测量结果。数模转换器基于Nyquist-Shannon采样定理工作。它指出&#xff1a;如果采样率大于…

OJ练习第143题——二叉树展开为链表

二叉树展开为链表 力扣链接&#xff1a;114. 二叉树展开为链表 题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终…

多个deb包合并成一个deb包的方法

文章目录 前言一 deb基础知识1.1 目录结构1.2 包结构说明 二、多个deb包合并一个deb包2.1 下载离线deb包2.2 解压安装包2.3 deb包合并 三、使用合并deb包可能存在的问题四、总结 前言 在UOS系统中默认没有开启开发者模式&#xff0c;此时若需要安装多个deb包时&#xff0c;只能…

最短路算法(Dijkstra Bellman-Ford SPFA Floyd)

目录 最短路算法总览Dijkstra算法1.朴素Dijkstra算法算法步骤算法应用Dijkstra求最短路Ⅰ 2.堆优化Dijkstra算法算法步骤算法应用Dijkstra求最短路Ⅱ Bellman-Ford算法算法步骤算法应用有边数限制的最短路 SPFA算法算法步骤算法应用1. spfa求最短路2. spfa判断负环 Floyd算法算…

STM32MP157驱动开发——GPIO 和 和 Pinctrl 子系统的概念

文章目录 Pinctrl 子系统重要概念概述重要概念pin controller&#xff1a;client device&#xff1a; 代码中怎么引用 pinctrl GPIO 子系统重要概念概述在设备树中指定引脚在驱动代码中调用 GPIO 子系统头文件常用函数实例&#xff1a; BSP工程师针对芯片的寄存器写Pinctrl子系…

代码随想录day25

216. 组合总和 III 这道题和昨天的相似的地方&#xff0c;但是也有不同的特点。这道题规定了数字范围是从1-9&#xff0c;并且一个组合中&#xff0c;不能出现同样的元素&#xff0c;比如说[1&#xff0c;2&#xff0c;2]这个就不可以&#xff0c;如果取过2之后&#xff0c;就只…