Spring入门第一讲——Spring框架的快速入门

article/2025/10/2 1:41:08

Spring的概述

什么是Spring?

我们可以从度娘上看到这样有关Spring的介绍:
在这里插入图片描述
说得更加详细一点,Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
为什么说Spring是一个一站式的轻量级开源框架呢?EE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。
在这里插入图片描述
从对Spring的简要介绍中,我们知道了Spring的核心有两部分:

  • IoC:即控制反转。举例来说,在之前的操作中,比方说有一个类,我们想要调用类里面的方法(不是静态方法),就要创建该类的对象,使用对象调用方法来实现。但对于Spring来说,Spring创建对象的过程,不是在代码里面实现的,而是交给Spring来进行配置实现的;
  • AOP:即面向切面编程。之前,讲Struts2框架的拦截器时,我们就已稍微讲了一下,在Spring后续的学习过程中,我们会着重来讲它,但是本文并不会过多阐述它。

为什么学习Spring?

在度娘上查看有关Spring的介绍时,我们可以找到如下一系列Spring的优点,这就是我们要学习Spring框架的原因。
在这里插入图片描述

Spring的快速入门

Spring的版本

需要说明的是,本系列入门Spring的教程使用的版本是spring-framework-4.2.4.RELEASE。

IoC概述

什么是IoC?

IoC即Inversion of Control,反应过来就是控制反转。啥是控制反转啊?控制反转指的就是将对象的创建权反转给(交给)了Spring,其作用是实现了程序的解耦合。也可这样解释:获取对象的方式变了,对象创建的控制权不是"使用者",而是"框架"或者"容器"。用更通俗的话来说,IoC就是指对象的创建,并不是在代码中用new操作new出来的,而是通过Spring进行配置创建的。

Spring的IoC的底层实现原理

这里先给出结论:Spring的IoC的底层实现原理是工厂设计模式+反射+XML配置文件。 就拿持久层(也即dao层,data access object,数据访问对象)的开发来说,官方推荐做法是先创建一个接口,然后再创建接口对应的实现类。所以,这里,我会以dao层的开发为例来证明Spring的IoC的底层实现原理就是工厂设计模式+反射+XML配置文件。
首先,创建一个Userdao接口。

public interface UserDao {public void add();
}

然后,再创建Userdao接口的一个实现类(UserDaoImpl.java)。

public class UserDaoImpl implements UserDao {public void add() {balabala......}
}

接着,我们在service层中调用dao层,核心代码如下:

// 接口 实例变量 = new 实现类
UserDao dao = new UserDaoImpl();
dao.add();

这时我们便可发现一个缺点:service层和dao层耦合度太高了,即接口和实现类有耦合(它俩之间的联系过于紧密),一旦切换底层实现类,那么就需要修改源代码,这真的不是一个好的程序设计,好的程序设计应当满足OCP原则(也即开闭原则),即在尽量不修改程序源代码的基础上对程序进行扩展。说到这里,我就不得不稍微讲一下面向对象设计的七大原则了,它不必强记,重在理解。
在这里插入图片描述
出现的这个问题该如何解决呢?解决方法是使用工厂设计模式进行解耦合操作。所以,我们需要创建一个工厂类,在工厂类中提供一个方法,返回实现类的对象。

public class BeanFactory {// 提供返回实现类对象的方法public static UserDao getUserDao() {return new UserDaoImpl();}
}

这样,在service层中调用dao层的核心代码就变为了下面的样子。

UserDao dao = BeanFactory.getUserDao();
dao.add();

如若这样做,会发现又产生了一个缺点:现在接口和实现类之间是没有耦合了,但是service层和工厂类耦合了。如果真正想实现程序之间的解耦合,那么就需要使用到工厂设计模式+反射+XML配置文件了。所以,我们这里提供一个XML配置文件,并且该配置文件中有如下配置信息。

<bean id="userDao" class="com.meimeixia.dao.impl.UserDaoImpl" />

然后再来创建一个工厂类,在工厂类中提供一个返回实现类对象的方法,但并不是直接new实现类,而是使用SAX解析配置文件,根据标签bean中的id属性值得到对应的class属性值,使用反射创建实现类对象。

public class BeanFactory {public static Object getBean(String id) {// 1.使用SAX解析得到配置文件内容// 直接根据id值userDao得到class属性值String classvalue = "class属性值";// 2.使用反射得到对象Class clazz = Class.forName(classvalue);UserDaoImpl userDaoImpl = (UserDaoImpl)lazz.newInstance();return userDaoImpl;}
}

以上就是Spring的IoC的底层实现原理。

Spring的IoC入门

下载Spring的开发包

Spring的官网是https://spring.io/,Spring的开发包的下载地址是https://repo.spring.io/libs-release-local/org/springframework/spring/,上面说过,我下载的是spring-framework-4.2.4.RELEASE这个版本的Spring。解压缩之后,可发现Spring开发包的目录结构如下。
在这里插入图片描述

创建web项目,引入Spring的开发包

首先创建一个动态web项目,例如spring_demo01,然后导入Spring框架相关依赖jar包,要导入哪些jar包呢?这是一个问题。
在这里插入图片描述
由于我们只是初次入门Spring,所以也只是使用到了Spring的基本功能,从上图红框框中的部分可知,我们需要使用到下面的这4个jar包。
在这里插入图片描述
除此之外,还要导入Spring支持的日志jar包,也就是下面两个jar包。
在这里插入图片描述
关于以上两个jar包,我稍微做一下解释,com.springsource.org.apache.commons.logging-1.1.1.jar它里面都是一些接口,有接口,那当然要有实现类了,恰好,com.springsource.org.apache.log4j-1.2.15.jar里面就是那些接口的实现类。使用Log4j,我们可以查看到当前运行程序中对象创建的过程,也可以看到更详细的信息,Log4j适合使用在程序调试中。
导入完日志相关的jar包之后,我们还要导入日志记录文件,即在src目录下引入Log4j的配置文件(log4j.properties),该文件内容如下:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###
# error warn info debug trace
log4j.rootLogger= info, stdout

对以上日志记录文件,我会粗略讲解一下。
在这里插入图片描述
从上图可知,log4j.rootLogger就是用于设置日志的输出级别,那么日志的输出级别有几种呢?有如下5种。
在这里插入图片描述

创建接口和实现类

首先,在src目录下创建一个com.meimeixia.spring.demo01包,并在该包下创建一个名为UserDao的接口。

package com.meimeixia.spring.demo01;/*** 用户管理的dao层的接口* @author liayun**/
public interface UserDao {public void save();}

然后,在com.meimeixia.spring.demo01包下创建UserDao接口的一个实现类——UserDaoImpl.java。

package com.meimeixia.spring.demo01;/*** 用户管理的dao层接口的实现类* @author liayun**/
public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("UserDaoImpl中的save方法执行了......");}}

将实现类交给Spring管理

首先,我们需要创建Spring的配置文件,Spring配置文件的名称和位置没有固定要求,一般建议把该文件放到src目录下面,名称可随便写,官方建议写成applicationContext.xml。然后我们还需要在配置文件中引入约束,Spring学习阶段的约束是schema约束。那么问题来了,这个约束又该怎么写呢?可参考docs\spring-framework-reference\html目录下的xsd-configuration.html文件,在其内容最后面找到如下内容。
在这里插入图片描述
将其复制黏贴到配置文件applicationContext.xml中,这样applicationContext.xml文件的内容就是下面的样子了。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"></beans>

最后,咱还要将实现类交给Spring来管理,即在配置文件中配置对象的创建。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- Spring入门的配置 --><bean id="userDao" class="com.meimeixia.spring.demo01.UserDaoImpl"></bean></beans>

编写测试类

我们要在Spring中写代码来实现获取applicationContext.xml文件中配置的对象,这段代码不要求大家重点掌握,只是用在测试中而已。这段代码主要用来解析Spring配置文件得到对象,但这个过程不需要我们写代码来实现了,Spring已经封装了一个对象来帮我们进行了这些操作,这个对象叫ApplicationContext,它就能实现这个功能。于是,我们需要在com.meimeixia.spring.demo01包下创建一个SpringDemo01的单元测试类。

package com.meimeixia.spring.demo01;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;/*** Spring的入门* @author liayun**/
public class SpringDemo01 {/** 传统方式的调用*/@Testpublic void demo01() {UserDao userDao = new UserDaoImpl();userDao.save();}/** Spring的方式的调用*/@Testpublic void demo02() {//先要创建Spring的工厂ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");// classpath就是类路径,src目录下的文件最终要编译到类路径下UserDao userDao = (UserDao) applicationContext.getBean("userDao");userDao.save();}}

然后,运行以上demo02单元测试方法,Eclipse控制台就会打印如下内容。
在这里插入图片描述

Spring IoC和DI的区别

IoC上面我已经讲过了,它指的就是将对象的创建权反转给(交给)了Spring。那DI又是什么鬼呢?DI,即Dependency Injection,翻译过来就是依赖注入,它指的就是Spring在管理某个类的时候会将该类依赖的属性注入(设置)进来,也就是说在创建对象的过程中,向类里面的属性中设置值。注意:依赖注入不能单独存在,须在控制反转基础之上完成,用更通俗点的话来说,就是注入类里面的属性值,不能直接注入,须创建类的对象再完成注入。
你还记得在面向对象设计的时候,类和类之间有几种关系吗?有3种,它们分别是:

  • 依赖,由于下图中B类的方法用到了A类,所以此时就可以说B类依赖于A类;
    在这里插入图片描述
  • 继承(is a),这种关系我们应该是见的要吐了;
    在这里插入图片描述
  • 聚合(has a),它有松散和紧密之分。例如,球队得有一个守门员,即使这个球队没有了这个守门员,它也还是一个球队,所以它是松散的;人得有一个脑袋,此时它就是紧密的。

说了这么多,咱就通过一个案例来看看DI在程序的体现。现在,我们想要给UserDaoImpl这个实现类里面的某一个属性(例如String类型的name)设置值,该咋怎呢?首先,将UserDaoImpl这个实现类修改成下面这个样子。

package com.meimeixia.spring.demo01;/*** 用户管理的dao层接口的实现类* @author liayun**/
public class UserDaoImpl implements UserDao {private String name;//提供set方法public void setName(String name) {this.name = name;}@Overridepublic void save() {System.out.println("UserDaoImpl中的save方法执行了......" + name);}}

如果使用传统的方式来为UserDaoImpl实现类的name属性设置值,那么SpringDemo01单元测试类中的demo01方法就应该写成下面这个样子。

package com.meimeixia.spring.demo01;import org.junit.Test;/*** Spring的入门* @author liayun**/
public class SpringDemo01 {/** 传统方式的调用*/@Testpublic void demo01() {/** 我想给这个类里面的某一个属性设置值,挺麻烦的!* * 1. 不能面向接口编程了* 2. 你还得手动调用set方法,也得去改变程序的源代码*/UserDaoImpl userDao = new UserDaoImpl();userDao.setName("李二");userDao.save();}}

这样写,就有两个缺点,一是不能面向接口编程了,二是咱还得手动调用对象的set方法,这必然就涉及到要改变程序的源代码了,这是我们不能接受的!
如果使用了依赖注入,即在applicationContext.xml文件中为配置好的UserDaoImpl实现类的name属性注入一个值,那么情况就完全不同了,以上两个缺点也就不复存在了。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- Spring入门的配置 --><bean id="userDao" class="com.meimeixia.spring.demo01.UserDaoImpl"><!-- DI:依赖注入 --><property name="name" value="李二" /></bean></beans>

此时,SpringDemo01单元测试类中的demo02方法依然不变,如下。

package com.meimeixia.spring.demo01;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;/*** Spring的入门* @author liayun**/
public class SpringDemo01 {/** 传统方式的调用*/@Testpublic void demo01() {		/** 我想给这个类里面的某一个属性设置值,挺麻烦的!* * 1. 不能面向接口编程了* 2. 你还得手动调用set方法,也得去改变程序的源代码*/UserDaoImpl userDao = new UserDaoImpl();userDao.setName("李二");userDao.save();}/** Spring的方式的调用*/@Testpublic void demo02() {//先要创建Spring的工厂ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = (UserDao) applicationContext.getBean("userDao");userDao.save();}}

运行以上demo02单元测试方法,Eclipse控制台就会打印出如下内容。
在这里插入图片描述

Spring的工厂类

Spring工厂类的结构图

在这里插入图片描述
从上图可以看出ApplicationContext(接口)继承自BeanFactory(接口)。

BeanFactory:老版本的工厂类

BeanFactory是老版本的工厂类,稍微了解一下就好,这个类在实际开发中我们并不需要用到。需要说明的一点是,它只有在调用getBean方法的时候,才会生成Spring所管理的类的实例。

ApplicationContext:新版本的工厂类

ApplicationContext是新版本的工厂类,它在加载配置文件的时候,就会将Spring所管理的类都实例化。ApplicationContext这个接口有两个实现类,如下图所示。
在这里插入图片描述
ClassPathXmlApplicationContext这个实现类前面用过了,下面咱就来用一下FileSystemXmlApplicationContext这个实现类。首先,拷贝一份applicationContext.xml文件到C盘下,其内容做一点点修改。
在这里插入图片描述
然后,在SpringDemo01单元测试类中编写如下一个demo03方法。

package com.meimeixia.spring.demo01;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;/*** Spring的入门* @author liayun**/
public class SpringDemo01 {/** 传统方式的调用*/@Testpublic void demo01() {	/** 我想给这个类里面的某一个属性设置值,挺麻烦的!* * 1. 不能面向接口编程了* 2. 你还得手动调用set方法,也得去改变程序的源代码*/UserDaoImpl userDao = new UserDaoImpl();userDao.setName("李二");userDao.save();}/** Spring的方式的调用*/@Testpublic void demo02() {//先要创建Spring的工厂ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = (UserDao) applicationContext.getBean("userDao");userDao.save();}/** 加载磁盘上的配置文件*/@Testpublic void demo03() {//先要创建Spring的工厂ApplicationContext applicationContext = new FileSystemXmlApplicationContext("C:\\applicationContext.xml");UserDao userDao = (UserDao) applicationContext.getBean("userDao");userDao.save();}}

最后,运行以上demo03单元测试方法,Eclipse控制台就会打印出如下内容。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/750max9X.shtml

相关文章

是Spring啊!

一.概念 spring概念 一个包含了众多工具方法的 IoC 容器 okk~~分析一下这句话意思,众多方法,IoC 是形容词,容器是名词 -> 众多方法:比如一个类里有许多方法, 容器:存储的东西 重点就是IoC是什么? Ioc 2.1解释 IoC -> Inversion of Control 控制反转 -> 对象的生命周…

Spring 是什么

Spring 是什么 Spring 是一个开源框架. Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. Spring 是一个 IOC(DI) 和 AOP 容器框架 具体描述 Spring: 轻量级&#xff1a;Spring 是非侵入性的 - 基于 Spring 开发的应…

如何理解Spring?

Spring 是包含了众多⼯具⽅法的 IoC 容器。 那何为容器呢&#xff1f;容器是用来容纳某种东西的装置。比如&#xff1a;List/Map 是数据存储容器&#xff0c;Tomcat 是Web 容器等等。Spring 也是⼀个容器&#xff0c;是⼀个 IoC 容器。 那何为IoC 呢&#xff1f;IoC Inversi…

【spring】spring是什么?详解它的特点与模块

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、spring介绍 二、spring的特点&#xff08;七点&#xff09; 1、简化开发 2、AOP的支持 3、声明式事务的支持 4、方便测试 5、…

Spring - 什么是spring?

好久没更新博客了&#xff0c;今天小更一波。 学习java已经有一段时间了&#xff0c;今天将接触Spring框架技术。 什么是Spring? spring 中文意思就是 春天&#xff0c;实际上spring 是真的给软件行业带来了春天。 使用spring的好处&#xff1f; spring可以解决企业级开发…

Spring和Spring Boot区别

spring和spring boot区别 二者主要区别是&#xff1a; 1、Spring Boot提供极其快速和简化的操作&#xff0c;让 Spring 开发者快速上手。 2、Spring Boot提供了 Spring 运行的默认配置。 3、Spring Boot为通用 Spring项目提供了很多非功能性特性。 一、Spring Boot和Sprin…

作为一个程序员,读不懂Spring就像读不懂对象的心?

???连读同事写的代码都费劲&#xff0c;还读Spring&#xff1f; 咋的&#xff0c;Spring 很难读&#xff01; 这个与我们码农朝夕相处的 Spring&#xff0c;就像睡在你身边的媳妇&#xff0c;你知道找她要吃、要喝、要零花钱、要买皮肤。但你不知道她的仓库共有多少存粮、也…

【Spring源码这样读】-怎么阅读源码

做开发要不要读源码&#xff1f;如果你天天996&#xff0c;真心的不建议你去读源码&#xff08;我是不介意做一个劝退师的&#xff09;。读源码确确实实是一个费时费力的活&#xff0c;如果你每天都很忙&#xff0c;偶尔看一眼&#xff0c;想了解其中的奥秘&#xff0c;这很难办…

CRUD搬砖两三年了,怎么阅读Spring源码?

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f468;‍&#x1f4bb;连读同事写的代码都费劲&#xff0c;还读Spring&#xff1f; 咋的&#xff0c;Spring 很难读&…

一、如何阅读Spring源码(全网最简单的方法)

学习Java最好最有效的方法是学习Spring&#xff0c;但是最笨最没效的方法也是学习Spring。 为什么这么说呢&#xff1f;道理其实很简单 A、Spring很庞大&#xff0c;很完善&#xff0c;也非常的底层&#xff0c;如果我们学会的Spring&#xff0c;那么也就掌握了很多的技术的核心…

【Spring】——Spring简单 读和取

前言 ❤️❤️❤️Spring专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring_冷兮雪的博客-CSDN博客 上期我们讲解了Spring的创建与使用&#xff0c;发现 将Bean 注册到容器 这一步中&#xff0c;如果Bean对象…

读取Spring配置文件的方法(Spring读取资源文件)

大厂必备&#xff01;读取spring配置文件的两种方法,需要的朋友可以参考下。 第一种&#xff1a; 1.spring配置文件 2.读取属性方法 第二种&#xff1a; 直接读取方式: 通过spring配置方式读取&#xff1a; spring bean配置: // 编辑不易&#xff0c;spring框架系列的快要更…

php如何将时间戳,PHP如何将时间戳转换日期

PHP如何将时间戳转换日期 在php中可以使用“date()”函数将时间戳转换日期&#xff0c;该函数用于格式化一个本地时间日期&#xff0c;其语法是“date($format,$timestamp)”&#xff0c;其参数format表示日期格式&#xff0c;参数timestamp表示要格式化的时间戳。 代码实例&am…

php 时间戳 24小时制,php如何将时间戳转换成小时制

php将时间戳转换成小时制的方法&#xff1a;【date("Y/m/d H:i:s",1446634507)】。date()函数可以把时间戳格式化为可读性更好的日期和时间。 php将时间戳转换称24小时制 (推荐教程&#xff1a;php视频教程)date("Y/m/d H:i:s",1446634507) //2015/11/04 1…

php时间戳转换日期24,php时间戳怎么转换回日期

在php中&#xff0c;可以使用date()函数来将时间戳转换回日期格式。date()函数可把时间戳格式化为可读性更好的日期和时间格式&#xff0c;语法“date (format,时间戳)”&#xff1b;format参数规定转换后的时间戳格式&#xff0c;例“Y-m-d H:i:s”。 本教程操作环境&#xff…

php里日期转为时间戳_php时间戳与日期的转换

php时间戳与日期的转换 大家也许对PHP时间戳已经有所了解&#xff0c;那么我们如何应用它来获取具体的日期呢&#xff1f;我们今天来为大家介绍一下PHP时间戳获取当前时期的具体方式。 实现功能&#xff1a;获取某个日期的时间戳&#xff0c;或获取某个时间的PHP时间戳。 strto…

html 时间戳转换年月日,时间戳与日期的转换方法

php怎么将指定日期转换为时间戳 date(Y-m-d H:i:s, 1156219870); UNIX时间戳转换为日期用函数: date() 一般形式:date(Y-m-d H:i:s, 1156219870); 日期转换为UNIX时间戳用函数:strtotime() 一般形式:strtotime(2010-03-24 08:15:42); js 中日期 转换成时间戳 例如2013-08-…

常用的计算机C语言,计算机c语言基础知识

计算机c语言基础知识 C语言程序设计是高效计算机专业学生必修的一门基础课程&#xff0c;那么你对计算机c语言了解多少呢?下面是小编整理的计算机c语言基础知识&#xff0c;欢迎大家阅读参考。 计算机c语言的特性 C语言是世界上最流行、使用最广泛的高级程序设计语言之一。在操…

C语言基础知识总结

本文的目的是记录平时工作学习过程中学习到的C语言知识&#xff0c;由于单独一篇文章记录的话可能篇幅过少&#xff0c;因此置顶此文用作此用处&#xff0c;本文从2017-12-16开始记录&#xff0c;后续新增内容不单独列出时间&#xff0c;在MarkEditor中有相应的版本记录。 文件…

【必读】C语言基础知识大全

C语言程序的结构认识 用一个简单的c程序例子&#xff0c;介绍c语言的基本构成、格式、以及良好的书写风格&#xff0c;使小伙伴对c语言有个初步认识。 例1&#xff1a;计算两个整数之和的c程序&#xff1a; #include main() { int a,b,sum; /*定义变量a,b&#xff0c;sum为整…