【Java】基本程序设计结构(一)

前言:现在,假定已经成功安装了JDK,并且能够运行上篇示例程序。本篇将开始介绍Java程序中的基本设计结构,其中包括:一个简单的Java应用,注释,数据类型,变量与常量,运算符,字符串,输入输出,控制流,大数,数组。这些内容将分为上下两篇,希望大家持续关注!

目录

一.一个简单的Java应用程序

二.注释 

 三.Java中的数据类型

 四.变量与常量

4.1声明变量

4.2变量的初始化 

4.3常量 

4.4枚举类型 

五.运算符

5.1算数运算符

 5.2关系运算符

5.3位运算符

5.4逻辑运算符

5.5 赋值运算符

5.6其他运算符 

 六.字符串

6.1子串 

6.2拼接

 6.3不可变字符串

这样会不会造成内存泄露呢?毕竟,原始字符串在堆中分配。十分幸运,Java将自动地进行垃圾回收。如果一个内存块不再使用了,系统最终会将其回收。

6.4检测字符串是否相等

 6.5空串与NULL串

6.6 String API


一.一个简单的Java应用程序

俗话说,再资深的程序员也是从一个神秘代码开始的,那便是——Hello,World!,现在我们同样用Java写一个最简单的Java应用程序,它会向控制台窗口发送一条消息:

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello,World!");
    }
}

这个程序虽然简单,但是其“麻雀虽小,五脏俱全”,所有的Java应用程序都具有这种结构。首先,Java严格区分大小写。如果出现了大小写错误,那么程序将无法运行。

下面我们逐行查看这段源代码 。关键字public称为访问修饰符(access modifier),这些修饰符用于控制程序的其他部分对这段代码的访问级别。关键字class标明Java程序中的全部内容都包含在目前暂时将它理解为程序逻辑的一个容器,程序逻辑定义了应用程序的行为)中。

关键字class后面紧跟类名。Java中定义类名的规则很宽松。名字必须以字母开头,后面可以跟字母和数字的任意组合。长度上基本没有限制,但是不能使用Java保留字(例如public,class)作为类名。保留字如下(有印象即可):

 类名的命名规范——“大驼峰(CamelCase)”,即每个英文单词首字母必须大写,例如:FirstSample...且源代码的文件名必须与公共类的名字相同,并用,java作为扩展名。因此,如果公共类名是FirstSample,存储这段源代码的文件名必须是FirstSample.java(再次提醒注意大小写)。

如果已经正确命名了这个文件,并且源代码中没有任何录入错误,在编译这段源代码之后就会的到一个包含这个类字节码的文件。Java编译器将字节码文件自动地命名为FirstSample.class,并存储在源文件的同一个目录下。

需要注意源代码中的大括号{ },在Java中,像在C/C++中一样,用大括号划分程序的各个部分(通常称为“块”)。Java中的任何方法(这里的“方法”就是Java中的“函数”)的代码都用"{"开始,用"}"结束。

我们暂且不去理睬关键字static void,而仅把它们当做编译Java应用程序的必要部分,之后会详细解释。现在需要记住:每个Java程序都必须有一个main方法,其声明格式如下所示:

public class ClassName{
    public static void main(String[] args) {
        program statements
    }
}

 最后,对于System.out.println("Hello,World!");这条语句,与大多数程序设计语言一样,可以将Java语句看成是语言中的句子。在Java中,每个句子都必须用分号结束。示例中的main方法体中只包含了一条语句,其功能是将一个文本行输出到控制台上。在这条语句中,我们使用System.out对象并调用了它的println 方法。注意:点号(.)用于调用方法。Java使用的通用语法如下:

object.method(parameters)

这等价于函数调用。在示例中,调用了println方法并传递给它一个字符串参数。这个方法将传递给它的字符串参数显示在控制台上。需要注意的一点是,Java同C/C++一样,都采用双引号界定字符串。

Java中的方法也可以没有参数,也可以有一个或多个参数,但即使一个方法没有参数,也需要使用空括号。例如:不带参数的println方法只打印一个空行。

二.注释 

Java中存在三种注释方法:1.单行注释(//);2.多行注释(/*        */);3.文档注释(/**        */)

关于文档注释前篇已经讲解:【Java】基本概念全概述——新手入门必看

/**
 * Created with IntelliJ IDEA.
 * Description:文档注释
 * User:lenovo
 * Date:2024-05-03
 * Time:15:14
 */
public class Test {
    public static void main(String[] args) {
        //单行注释:
        //System.out.println("Hello,World!");
        /*多行注释:
        for (int i = 0; i < 10; i++) {
            System.out.println("haha");
        }*/
    }
}

 三.Java中的数据类型

 Java 是一种静态类型的编程语言,这意味着所有变量必须在使用之前声明好,也就是必须得先指定变量的类型和名称。总的来说,Java的数据类型基本可以分为两类:

(一)基本(内置)数据类型:

基本数据类型是 Java 语言操作数据的基础,包括 boolean、char、byte、short、int、long、float 和 double,共 8 种

整型:int(4字节),short(2字节),long(8字节),byte(1字节

        注意:长整型long数据有一个后缀L或l(如4000000000L)

浮点型:float(4字节),double(8字节)

        注意:float类型类型数据后面有一个后缀F或f(例如3.14F)

char类型:char 类型是一个单一的 16 位 Unicode 字符。char类型的字面量值要用单引号括起来,例如:'A'是编码值为65的字符常量,与1“A”不同。

boolean(布尔)类型:boolean类型有两个值,false和true,用来判定逻辑条件。整型值和布尔值之间不能进行转换!

public class PrimitiveTypeTest {  
    public static void main(String[] args) {  
        // byte  
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);  
        System.out.println("包装类:java.lang.Byte");  
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);  
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);  
        System.out.println();  
  
        // short  
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);  
        System.out.println("包装类:java.lang.Short");  
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);  
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);  
        System.out.println();  
  
        // int  
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);  
        System.out.println("包装类:java.lang.Integer");  
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);  
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);  
        System.out.println();  
  
        // long  
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);  
        System.out.println("包装类:java.lang.Long");  
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);  
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);  
        System.out.println();  
  
        // float  
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);  
        System.out.println("包装类:java.lang.Float");  
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);  
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);  
        System.out.println();  
  
        // double  
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);  
        System.out.println("包装类:java.lang.Double");  
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);  
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);  
        System.out.println();  
  
        // char  
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);  
        System.out.println("包装类:java.lang.Character");  
        // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台  
        System.out.println("最小值:Character.MIN_VALUE="  
                + (int) Character.MIN_VALUE);  
        // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台  
        System.out.println("最大值:Character.MAX_VALUE="  
                + (int) Character.MAX_VALUE);  
    }  
}

  (二)   .引用数据类型:

除了基本数据类型以外的类型,都是所谓的引用类型。常见的有数组(对,没错,数组是引用类型,后面我们会讲)、class(也就是),以及接口(指向的是实现接口的类的对象)。

来张思维导图感受一下:

在Java中,int 作为成员变量时或者静态变量时的默认值是 0。那不同的基本数据类型,是有不同的默认值和大小的,来个表格感受下。

 

 四.变量与常量

4.1声明变量

不难,和其他语言结构是一样的。根据数据特征选择不同数据类型以及合适的变量名。

//变量声明结构:类型+变量名
        double salary;
        int vacationDays;
        long earthPopulation;
        boolean done;

4.2变量的初始化 

声明一个变量之后,必须使用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量的值。有以下两种方法:

 //法一:先声明后初始化
        int vacationDays;
        vacationDays=12;
//法二.声明的同时初始化
        int vacationDays=12;

补充:从Java10开始,对于局部变量,如果可以从变量的初始值判断出它的类型,就不再需要声明类型。只需要使用关键字var而无须指定类型:

var vacationDays=12;//vacationDays is an int
var greeting="Hello!";//greeting is a String

4.3常量 

 在Java中,利用关键字final指示常量,例如:

public class Constants{
    public static void main(String[] args) {
        final double CM_PER_INCH=2.54;
        double width=8.5;
        double height=11;
        System.out.println("Paper size in centimeters:"+width*CM_PER_INCH+"by"+height*CM_PER_INCH);
    }
}

关键字final表示这个变量只能被赋值一次,一旦赋值后就不能再更改了,习惯上,常量名使用全大写。在Java中,经常希望某个常量可以在一个类的多个方法中使用,通常将这些常量称为类常量(class constant)。可以使用关键字static final 设置一个类常量。下面是一个示例:

 public class Constants2{
        public static final double CM_PER_INCH=2.54; 
        public static void main(String[] args) {
            double width=8.5;
            double height=11;
            System.out.println("Paper size in centimeters:"+width*CM_PER_INCH+"by"+height*CM_PER_INCH);
        }
    }

4.4枚举类型 

 有时候,变量的取值只在一个有限的集合内。例如,服装的尺寸或者是披萨的大小。当然,可以将这些尺寸分别编码为1,2,3,4或S,M,L,X。但这种设置很容易出错,很可能在变量中保存的是一个错误的值(如0或m)。

针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如:

enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
//声明这种类型的变量
Size s=Size.MEDIUM;

Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者特殊值null,null表示这个变量没有设置任何值。 

五.运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:

  • 算术运算符
  • 关系运算符
  • 位运算符
  • 逻辑运算符
  • 赋值运算符
  • 其他运算符

5.1算数运算符

public class Test {
  public static void main(String[] args) {
            int a = 10;
            int b = 20;
            System.out.println("a == b = " + (a == b) );//false
            System.out.println("a != b = " + (a != b) );//true
            System.out.println("a > b = " + (a > b) );//false
            System.out.println("a < b = " + (a < b) );//true
            System.out.println("b >= a = " + (b >= a) );//true
            System.out.println("b <= a = " + (b <= a) );//false
            System.out.println(" a++ = "+(a++));//10    1.使用a 2.a=a+1
            System.out.println(" ++a = "+(++a));//12    1.a=a+1 2.使用a
        }
}

补充:数学函数与常量

在计算过程中,我们会需要使用到一些数学公式去解决实际问题,在Math类中,就包含了各种各样的数学函数。具体使用如下:

double x=4;
double y=Math.sqrt(x);
System.out.println(y);//2.0

类似的数学公式还有:

Math.sin                        Math.exp                        Math.PI(表示π的近似值)

Math.cos                        Math.log                        Math.E(表示e的近似值)

Math.atan                        Math.log10

Math.atan2 

 5.2关系运算符

关系运算符的结果是一个布尔值,即true或false。

5.3位运算符

处理整型类型时,可以直接对组成整数的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。位运算符包括:

对于A和B来说,它们的二进制格式如下:

 注意:没有无符号左移。(因为无符号左移和左移本质是一样的,都是向尾端补0)

public class Test {
  public static void main(String[] args) {
     int a = 60; /* 60 = 0011 1100 */ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;
     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );
 
     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );
 
     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );
 
     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );
 
     c = a << 2;     /* 240 = 1111 0000 */
     System.out.println("a << 2 = " + c );
 
     c = a >> 2;     /* 15 = 1111 */
     System.out.println("a >> 2  = " + c );
  
     c = a >>> 2;     /* 15 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
}

那么位运算符如何体现掩码技术呢?例如,如果n是一个整数变量,而且用二进制表示的n从右边数第4位为1,则

int fourthBitFromRight=(n&0b1000)/0b1000;

 会返回1,否则返回0。利用&并结合使用适当的2的幂,可以把其他位掩掉,而只留下其中的某一位。

5.4逻辑运算符

这里需要注意的是!运算符后面跟的一定是一个布尔表达式,不能是一个变量值或常量值。

int a=0;
if(!a)//error{
    ...//Operator '!' cannot be applied to 'int'
}

短路运算:

当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。 就像电路中的短路截断一样,前面电路断了后面电路就不会执行了。(&和|运算符不采用“短路方式”来求值,也就是说,得到一个布尔值之前的两个操作数都需要计算)

public class LuoJi{
    public static void main(String[] args){
        int a = 5;//定义一个变量;
        boolean b = (a<4)&&(a++<10);
        System.out.println("使用短路逻辑运算符的结果为"+b);
        System.out.println("a的结果为"+a);
    }
}

运行结果如下:

使用短路逻辑运算符的结果为false
a的结果为5

5.5 赋值运算符

这个很简单,大家实际使用的时候根据具体情况使用可以简化代码,但一定注意的是等号一般是放在右边的,顺序不要颠倒。

5.6其他运算符 

1.条件运算符(? :):

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

variable x = (expression) ? value if true : value if false
//a=5>3?5:3;
//a=5

 2.instanceof 运算符:

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。instanceof运算符使用格式如下:

( Object reference variable ) instanceof  (class/interface type)

示例如下:

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

 以上就是Java的运算符概述,但是了解了运算符之后我们还需要知道各个运算符的优先级,这样我们才能使各个运算符按正确的顺序执行程序:

 六.字符串

 从概念上讲,Java字符串就是Unicode字符序列。例如,字符串“Java\u2122”由5个Unicode字符组成。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫作String。每个用双引号括起来的字符串都是String类的一个实例:

String e="";//an empty string
String greeting="Hello";

6.1子串 

String类的substring方法可以从一个较大的字符串提前出一个子串,例如:

String greeting="Hello";
String s=greeting.substring(0,3);

创建一个由字符“Hel”组成的字符串。

substring方法的第二个参数是不想赋值的第一个位置。这里要复制的位置为0,1,2的字符。

substring的工作方式有一个优点:容易计算子串的长度。例如:s.substring(a,b)的长度为b-a。例如,资产“Hel”的长度为3-0=0。

6.2拼接

与绝大多数程序设计语言一样,Java语言允许使用+号连接两个字符串。

拼接是一个非常常用的一种字符串处理方式。

String expletive="Expletive";
String PG13="deleted";
String message=expletive+PG13;
//将"Expletivedeleted"赋给message

当将一个字符串与一个非字符串的值进行拼接时,后者会转换成字符串(任何一个Java对象都可以转换成字符串),例如:

int age=13;
String rating="PG"+age;
//将rating设置为"PG13"

这种特性通常用在输出语句,例如:

int answer=1;
System.out.println("The answer is "+answer);
//The answer is 1

 如果需要把多个字符串放在一起,用一个界定符分隔,可以使用静态join方法:

String all=String.join("/","S","M","L","XL");
//all is the string "S/M/L/XL"

在Java11中,还提供了一个repeat方法:

String repeated="Java".repeat(3);
//repeated is "JavaJavaJava"

 6.3不可变字符串

 String类没有提供修改字符串中某个字符的方法。如果希望将上文greeting("Hel")的内容修改为“Help”,不能直接将greeting最后两个位置的字符修改为'p'和'!'。在Java中其实是非常容易实现的:

greeting=greeting.substring(0,3)+"p!";

由于不能修改Java中的单个字符,所以Java文档中将String类对象称为是不可变的(immutable) ,如同数字3永远是数字3一样,字符串“Hello”永远包含字符H,e,l,l,o的代码单元序列。你不能修改这些值,不过,可以修改字符串变量greeting,让它引用另外一个字符串,这就如同可以让原本存放3的数值变量改成存放4的一样。

在学习完C之后,当我们第一次接触Java字符串的时候,总是会将字符串认为是字符数组:

char greeting[]="Hello";

这种认识是错误的,Java字符串大致类似于char*指针,

char* greeting="Hello";

当把greeting替换为另一个字符串的时候,Java代码大致进行下列操作:

char* temp=malloc(6);
strncpy(temp,greeting,3);
strncpy(temp+3,"p!",3);
greeting=temp;

这样一系列操作之后,现在greeing就指向了字符串“Help!”。不过,如果对greeting做另一个赋值会怎样呢?

greeting="Howdy";

这样会不会造成内存泄露呢?毕竟,原始字符串在堆中分配。十分幸运,Java将自动地进行垃圾回收。如果一个内存块不再使用了,系统最终会将其回收。

6.4检测字符串是否相等

 在C语言中我们使用strcmp函数来检测两字符串是否相等。在Java中我们也有类似的函数实现该功能。

可以使用equals方法检测两个字符串是否相等,对于表达式:

s.equals(t);

如果字符串s和t相等,则返回true;否则返回false。需要注意的是,s和t可以是字符串变量,也可以是字符串字面量,例如,以下表达式是合法的:

"Hello".equals(greeting);

要想检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。

if(str==null)

切记一定不要使用“==”运算符检测两个字符串是否相等!这个运算符仅仅能确定两个字符串是否存在在同一个位置上。当然,如果字符串在同一个位置上,它们必然相等。但是,完全有可能将内容相同的多个字符串副本放在不同位置上。

String greeting="Hello";
if(greeting=="Hello")
//true
if(greeting.substring(0,3)=="Hel")
//false

 6.5空串与NULL串

空串(" ")是长度为0的字符串。可以用下面代码检查一个字符串是否为空:

if(str.length()==0)
//或
if(str.equals(""))

空串是一个Java对象,有自己的串长度(0)和内容(空)。 

 String变量还可以存放一个特殊的值,名为Null,表示目前没有任何对象与该变量关联,要检查一个字符串是否为Null,要使用下列条件:

if(str==null)

有时还需要检查一个字符串既不是null也不是空串:

if(str!=null&&str.length()!=0)

注意先后顺序: 首先要检查str不为null。

6.6 String API

API:应用编程接口。每一个API的注释都是以类名开始,如:java.lang.String。类名之后是一个或多个方法的名字,解释和参数描述。

Java中的String类包含了50多种方法。

API可以通过官方的Java帮助手册查询:Java SE API 和文档

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spring框架学习记录(3)

Spring事务 Spring事务简介 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功或同失败 Spring事务角色 事务管理员&#xff1a;发起事务方&#xff0c;在Spring中通常指代业务层开…

企业级数据治理学习总结

1. 水在前面 “数据治理”绝对是吹过的牛里面最高大上的题目了&#xff0c;本来想直接以《企业级数据治理》为题来水的&#xff0c;码字前又跑去图书馆借了几本书&#xff0c;翻了几页才发现自己连半桶水都提不起&#xff0c;撑死只能在小屁孩跟前吹吹牛。 好吧&#xff0c;实在…

Mysql如何通过ibd文件恢复数据

Mysql ibd文件恢复注意问题 创建数据库&#xff08;随意创建&#xff09;创建数据表&#xff08;备注&#xff1a;表结构要和要恢复的表结构一致&#xff0c;row_format要和ibd文件的row_format一致&#xff0c;否则&#xff0c;会提示两者不一致。 当前row_formatdynamic&…

刘强东创业成功的四大要素:团队、用户体验、成本与效率

摘要&#xff1a; 本文深入探讨了刘强东创业成功的四大关键要素&#xff1a;团队、用户体验、成本和效率。通过对这些要素的细致分析&#xff0c;我们旨在揭示刘强东如何运用这些策略将京东打造成一个全球知名的电商平台。 一、引言 刘强东作为京东集团的创始人和CEO&#xff…

【DPU系列之】DPU中的ECPF概念是什么?全称是什么?(E CPF对标H CPF;embedded CPU function ownership)

ECPF&#xff1a;embedded CPU function ownership。 嵌入式CPU运转ownership。也叫DPU模式&#xff0c;是DPU工作运转3种模式之一&#xff0c;也是默认的模式。这里的嵌入式CPU指的是DPU上ARM CPU&#xff0c;表示网卡所有资源和功能被embedded CPU全权管理&#xff0c;行使所…

虚拟机jvm下

jvm原理与实践 java程序的跨平台特性 jvm基本结构 JVM类加载流程和内存结构总览 类加载 加载阶段 类加载 验证阶段 类加载 准备阶段 类加载 解析阶段 类加载 初始化阶段 程序计数器 虚拟机栈&本地方法栈 栈帧操作 堆 方法区 永久代 元空间 垃圾回收 可触及性

SpringBoot+Vue实现美食交流网站的设计与实现

一、前言介绍 美食交流网站采用Java技术&#xff0c;Mysql数据库存储数据&#xff0c;基于Springboot框架开发。系统采用了模块化设计方法&#xff0c;根据用户的需求开发功能模块&#xff0c;方便了程序扩展维护&#xff0c;以便后期的更新。整个开发过程首先对系统进行需求分…

Gradle 进阶学习 之 build.gradle 文件

build.gradle 是什么&#xff1f; 想象一下&#xff0c;你有一个大型的乐高项目&#xff0c;你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中&#xff0c;build.gradle 就是这个清单&#xff0c;它告诉计算机如何构建&#xff08;组合&#xff09;你的软…

Python-VBA函数之旅-open函数

目录 一、open函数的常见应用场景 二、open函数使用注意事项 三、如何用好open函数&#xff1f; 1、open函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、open函数的常见应用场…

LLaMA详细解读

LLaMA 是目前为止&#xff0c;效果最好的开源 LLM 之一。精读 LLaMA 的论文及代码&#xff0c;可以很好的了解 LLM 的内部原理。本文对 LLaMA 论文进行了介绍&#xff0c;同时附上了关键部分的代码&#xff0c;并对代码做了注释。 摘要 LLaMA是一个系列模型&#xff0c;模型参…

带权并查集

续前章节&#xff1a;并查集及应用 目录 1 带权问题1.1 点带权1.2 边带权 2 例题2.1 家族合并2.2 信息传递2.3 [NOI2002] 银河英雄传说 1 带权问题 1.1 点带权 用num[i]记录节点 i i i 所在的集合的数量。 初始化&#xff1a;所有的num[i]都是 1 1 1&#xff0c;因为每个点…

公考学习|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

Spring 原理

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring学习之路&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 Bean的作用域 代码实现 观察Bean的作用域 Bean的生命周期 Spring …

[单片机课设]十字路口交通灯的设计

题目要求&#xff1a; 模拟交通灯运行情况。南北绿灯亮30秒&#xff0c;南北黄灯亮3秒&#xff0c;东西红灯亮33秒&#xff1b;南北红灯亮33秒&#xff0c;东西绿灯亮30秒&#xff0c;东西黄灯亮3秒&#xff1b;要求数码管同步显示时间的倒计时&#xff0c;用定时器实现延时。…

Java_从入门到JavaEE_07

一、数组的排序&#xff08;冒泡排序&#xff09; 原理&#xff1a; 从下标“0”开始&#xff0c;相邻两个元素依次进行比较&#xff0c;每次找出最大的往后移动。 规律&#xff1a;N个数字来排队&#xff0c;两两相比小靠前&#xff0c;外层循环N-1&#xff0c;内层循环N-1-i…

error LNK2001: 无法解析的外部符号 “__declspec(dllimport) public: __cdecl ......

运行程序时&#xff0c;报如上图所示错误&#xff0c;其中一条是&#xff1a; ReflectionProbe.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl osg::Object::Object(bool)" (__imp_??0ObjectosgQEAA_NZ) 报这个错误一般是因为…

MongoDB详解

目录 一、MongoDB概述 1.MongoDB定义 2.MongoDB主要特点 2.1文档 2.2集合 2.3数据库 2.4数据模型 二、安装MongoDB 1.Windows安装MongoDB 1.1下载MongoDB 1.2安装MongoDB 1.3配置MongoDB 1.3.1可能遇到的问题 1.4安装一盒可视化工具 2.Linux安装MongoDB 2.1下载…

鸿蒙内核源码分析(用栈方式篇) | 程序运行场地谁提供的

精读内核源码就绕不过汇编语言&#xff0c;鸿蒙内核有6个汇编文件&#xff0c;读不懂它们就真的很难理解以下问题. 1.系统调用是如何实现的? 2.CPU是如何切换任务和进程上下文的? 3.硬件中断是如何处理的? 4.main函数到底是怎么来的? 5.开机最开始发生了什么? 6.关机…

WPF之XmlDataProvider使用

1&#xff0c;WPF XAML支持数据提供&#xff08;DataProvider&#xff09;&#xff0c;但其提供的数据只供查看不可进行修改&#xff0c;删除&#xff0c;添加等。 数据提供者都继承自System.Windows.DataSourceProvider类&#xff0c;目前&#xff0c;WPF只提供两个数据提供者…

Stream流操作

看到Stream流这个概念&#xff0c;我们很容易将其于IO流联系在一起&#xff0c;事实上&#xff0c;两者并没有什么关系&#xff0c;IO流是用于处理数据传输的&#xff0c;而Stream流则是用于操作集合的。 当然&#xff0c;为了方便我们区分&#xff0c;我们依旧在这里复习一下…