php怎么输出布尔值,自学JAVA难不难?
Java学习需要具备的条件
是否有兴趣学。如果对Java没有兴趣,建议还是不要自学了,不敢兴趣很容易就会放弃的,学到半路就不学了。如果有兴趣,那就太好了,学下去,你会发现自己受益良多!逻辑思维能力。逻辑思维能力决定了你能不能学好Java,不一定要求你的思维能力有多强,但是不要太差了,毕竟学这个还是需要有一点逻辑思维能力的,太差了可能都看不懂!坚定目标信心。学Java是为了什么?工资高?前景好?有兴趣,总之你要有个目标一直督促自己学下去,不然,你发现自己学不下去了,就真的很难再坚持!另外一定要梳理好有计划学习的知识点,可参考下放2019年最新Java学习路线图
这个学习线路图把每个知识点都涵盖进去了,可以查看大图!下面说分阶段的,配合视频学习!
第一阶段:
第二阶段
第三阶段:
第四阶段
第五阶段
在学习Java的时候也要给自己树立目标,是为了就业还是为了兴趣爱好,就业形势中可以看到互联网企业集中的北京、上海、深圳的Java工程师需求量最大。
资均在10K以上,可以说Java工作岗位多,并且工资高,总体来说,市场需求量比较大。
如何获取当前登录的用户名并显示出来?
其实就是一个记录的问题。
比如你可以在建表时,就创建一个在线表,其中可以包含在线用户ID号、用户名等等内容。
通常情况下该表是空的,当有用户登录时,就将其ID号写入该表,手动退出时,清除表中记录。
这样当要显示在线用户列表时,只需要遍历这个表就行。
还有一种方法是在创建用户信息表时,预留一个字段为:on_line,其类项为布尔型,默认值是false。当对应用户登录时,将该值update为true,当用户手动退出时将该值重置为false。
这样,当要显示在线用户时,直接遍历用户表时使用条件where on_line=true即可。
自考专科计算机专业靠谱嘛?
对于题主的问题”初中学历,自考专科计算机专业靠谱嘛,有前途嘛?“
我有以下几点建议:
一、无论何时决定学习深造都为时未晚。
祝贺你走向社会之后,知道了学习的重要性,决心学习专科课程。自考要求自学能力强,相对于其它成人教育,考试难度要大一些,但是相对于成人教育,自考毕业证的含金量也最大,也能真正学到东西,并不是像某些人说的自考是在混文凭,我身边就有很多朋友学的自考。
二、勤奋能创造奇迹。
初中数学很差的原因,我想有很多,可能因为你当时并未认识到学习的重要性,没有认真地去学,也可能是因为你对于数学老师的讲解方式理解不了,也可能是你真的对数学不擅长,但这都不重要,只要下定决心,苦学,勤学,是能创造奇迹的。我的孩子大学学建筑设计,有一门课怎么也学不会,后来他发狠,用一周时间,把一本书都背下来了,在背书的过程中,很多难懂的知识点豁然开朗,最后他那门课考试得了A。但愿他的背书经历,能鼓舞你学习的信心。
三、至于选择何种专业,是要看个人的喜欢和工作需要来决定的。
你提出想学计算机专业,建议可以先买一本计算机专业方面的书籍,自学试试,现在网络很方便,为自学提供了很多便利条件,不懂的环节可以网络搜索,或者来悟空问答提问,或者去知乎提问,如果一本书学下来,你觉得其中的难度你是可以克服的,而且收获很大,说明你有很强的自学能力,你也比较适合计算机专业,就可以自信满满地去报名了。
四、学习任何知识都是有前途的。
如果目标已经确定,那就努力拼搏吧,学习任何知识,都是有前途的,这一点是肯定的,不必担心会学无所用,发奋读书,终生受益。
我是学中文专业的,但是最近要做视频课程,学了一些剪辑等方面的知识,这可是要用到很多理科知识的,但是学下来,还比较顺利,不懂的环节可以百度,或者来悟空问答提问,里面的解答很浅显易懂而且实用,对我帮助很大,相信无所不能的网络也能帮到你更多。
函数参数的各种语法特征?
一、函数的基本语法
语法
function functionName(类型限定 参数列表) : 返回值类型
{
}
案例:计算两个数之和。
function sum (int $a, int $b) : string
{
return $a + $b;
}
echo sum(1, 2); // 3
二、函数的分类
2.1 命名函数
命名函数自动提升到脚本顶部,在全局任何地方都能调用。// 按函数名称调用
demo1('残破的蛋蛋');
// 声明一个demo1函数
function demo1($name) {
echo "My name is ${name}.";
}
以上代码会输出:My name is 残破的蛋蛋.2.2 匿名函数
没有指定具体函数名称的函数叫匿名函数,也叫闭包函数。$var = function () {
// TODO
}
以上声明的就是一个匿名函数,它需要把函数赋给一个变量,然后通过变量去调用。$demo2 = function () {
echo "Hello World!";
}
$demo2(); // Hello World!
匿名函数通过变量调用,以上结果为:Hello World!。三、函数的参数
3.1 必选参数
function person1 (string $name) : string
{
return "Hello, ${name}!";
}
echo person1('残破的蛋蛋')."<br>"; // Hello, 残破的蛋蛋!
echo person1(123)."<br>"; // Hello, 123!
echo person1(true)."<br>"; // 报错
上述第三次函数调用报错的原因是:当限定了传入的参数类型为字符串时,标量(单值)会自动转换成字符串,但是布尔型、数组、类是无法自动转换的。3.2 可选参数
在定义函数的时候声明了参数,如果在调用的时候没有指定参数或者是少指定了参数,那么就会出现缺少参数的报错。在PHP中,支持函数的默认方式调用,即为函数的参数指定一个默认值,在调用函数的过程中如果没有指定参数的值,那么在函数中会使用参数的默认值。function person2 (string $name, int $age = 20, string $sex = "男") {
echo "我的名字是:${name},年龄:${age}岁,性别:${sex}。<br>";
}
// 我的名字是:残破的蛋蛋,年龄:20岁,性别:男。
person2('残破的蛋蛋');
在上述案例中我们确实为person2()函数声明了三个参数,但是我们只传了一个参数,其他两个参数都使用的是默认值。当调用函数传参的过程中,实参和形参是按照参数传递的顺序一一对应的,如果实参个数少于形参,则后面的形参不会被传值。当使用默认参数时,必须放在非默认参数的后面,否则可能会导致函数不会按照预期的执行。3.3 不定参数
语法
function functionName (...$args) {
// TODO
}
function person3 () {
// 获取传递给函数的所有变量数组
$args = func_get_args();
// 遍历每一个传入的参数
foreach ($args as $key => $arg) {
$num = $key + 1;
echo "第${num}个参数是:${arg}<br>";
}
}
person3('残破的蛋蛋', 30, '男');
// 第1个参数是:残破的蛋蛋
// 第2个参数是:30
// 第3个参数是:男
从PHP5.6以后,可以不使用func_get_args()函数获取可变参数,使用“…”运算符来实现可变长度的函数。function person4 (...$args) {
print_r($args);
}
person4('残破的蛋蛋', 30, '男'); // Array ( [0] => 残破的蛋蛋 [1] => 30 [2] => 男 )
这是一个非常实用的功能,当一个函数的参数过多时,可以不用逐一地传递参数,实用可变参数就可以传参了。四、函数的返回值
通常情况下,函数只允许有一个返回值,原则是“单值”返回的,如果想返回多值怎么办?那么只能在返回值的类型上打主意了,可以通过以下方法来操作。4.1 返回一个数组
function success () : array
{
return ['status' => 1, 'message' => '验证成功'];
}
$res = demo1();
echo $res['status'] ? $res['message'] : '验证失败!'; // 验证成功!
4.2 返回一个对象
function user () : object
{
return new class () {
public $name = 'admin';
public $email = 'admin@abc.cn';
};
}
$user = user();
printf("name = %s,email = %s", $user->name, $user->email); // name = admin,email = admin@abc.cn
4.3 序列化字符串
4.3.1 php内置的序列化函数
如果有一些数据需要进行网络传输或保存到文件或数据表中的时候要用到序列化函数。如果这个序列化的数据只在php程序中使用,应该使用php内置的方法就可以了。function result() : string
{
return serialize(['status' => 1, 'message' => '验证成功']);
}
echo result(); // a:2:{s:6:"status";i:1;s:7:"message";s:12:"验证成功";}
在php中使用时要还原成原来的类型,也就说反序列化:$arr = unserialize($str);
print_r($arr); // Array ( [status] => 1 [message] => 验证成功 )
4.3.2 JSON格式字符串
将数据转为通用的JSON格式字符串,这样的话就可以与其他语言进行数据交换了,例如:JS,JAVA…function demo4() : string
{
// JSON_UNESCAPED_UNICODE 显示中文,否则显示的是编码过的中文字符
// \u9a8c\u8bc1\u6210\u529f
return json_encode(['status' => 1, 'message' => '验证成功'], JSON_UNESCAPED_UNICODE);
}
$str = demo4();
echo $str; // {"status":1,"message":"验证成功"}
如果当前脚本接收到一个前端或其它接口发送过来的json格式的数据,可以使用json_decode进行解析。解析的目的是将外部的json还原成php能够处理的数据类型。$res = json_decode($str);
// 默认将外部的JSON解析成Object类型。
var_dump($res);
printf('status = %d, message = %s<hr>',$res->status, $res->message);
结果:
如果不用对象的方式访问,也可以给json_decode()函数传入第二个参数:true。$res = json_decode($str, true);
printf('status = %d, message = %s<hr>',$res['status'], $res['message']);
结果:
五、函数的作用域
在JS中作用域有三种:全局、函数、块作用域,而在PHP中,只有全局和函数一种作用域。全局变量也称为外部变量,是定义在函数外部的。它的作用域从变量定义处开始。$name = '残破的蛋蛋'; // 声明一个$name的全局变量
$email = '826350863@qq.com'; // 声明一个$email的全局变量
// 声明一个user函数
function user () {
echo "我的名字是:${name},邮箱是:${email}";
}
// 调用函数
user();
结果:
以上结果我们发现报错了,这是因为在上面的代码中,在函数user()外面声明了两个全局变量$name和$email,但是在PHP中,不能直接在函数中使用全局变量,所以在user()函数中使用的变量$name和$email相当于新声明的两个变量,并且没有被赋值,是两个空值,所以会报错。在函数中如果要使用全局变量可以使用global关键字或者$GLOBALS关键字。如下所示:function user1 () {
// 在函数内部使用global关键字引入全局变量,多个变量之间用逗号隔开
global $name, $email;
echo "我的名字是:${name},邮箱是:${email}";
}
user1(); // 我的名字是:残破的蛋蛋,邮箱是:826350863@qq.com
function user2 () {
// 在函数内部使用global关键字引入全局变量,多个变量之间用逗号隔开
echo "我的名字是:{$GLOBALS['name']},邮箱是:{$GLOBALS['email']}";
}
user2();
以上两个函数user1()和user2()都可以正常的输出结果:我的名字是:残破的蛋蛋,邮箱是:826350863@qq.com。在$GLOBALS数组中,每一个变量都是一个元素,变量名就是它的键名,变量值就是对应的键值。$GLOBALS是一个超全局变量。六、闭包
匿名函数就是闭包(官方手册写的),闭包可以访问函数外部的自由变量/父级作用域的变量。$demo2 = function () use ($name, $email) {
return sprintf('name = %s<br>email = %s', $name, $email);
};
echo $demo2();
结果
闭包支持引用传参:参数前加&,示例如下:echo "当前name的值是:${name}<br>";
$demo3 = function ($myName) use (&$name) {
// 闭包中将引用参数更新后,会实时映射到外部的原始参数中
$name = $myName;
echo "现在name的值是:${name}<br>";
};
echo $demo3('拤碎的蛋蛋');
// 输出:
// 当前name的值是:残破的蛋蛋
// 现在name的值是:拤碎的蛋蛋
结果
闭包use禁止使用以下三种参数:超全局不让用$_GET
$this
与当前参数重名不让用
闭包经常用作函数的返回值,示例如下:// 闭包经常用作函数的返回值
function demo4 ($site) {
return function ($color) use ($site) {
return sprintf('<h3 style="color:%s">%s</h3>', $color, $site);
};
}
第一种调用方式:var_dump(demo4('PHP中文网'));
$closure = demo4('PHP中文网');
echo $closure('red');
第二种调用方式:// 通过高阶函数调用:柯里化
echo demo4('PHP中文网')('red');
结果:
七、回调函数
回调函数是指调用函数时传递的不是一个标准的变量,而是将另外一个函数作为参数传递到调用的函数中。call_user_func_array()调用回调函数,并把一个数组作为回调函数的参数。语法:
call_user_func_array ( callable $callback , array $param_arr ) : mixed
案例
class Person {
// 实例方法
public function getName(string $name) : string
{
return "My name is ${name},";
}
public static function age(int $age): string
{
return "年龄是:${age}岁。";
}
}
// 调用实例方法
// 注意,这里必须是要实例化的,除非是static
$str = call_user_func_array(['Person', 'getName'], ['残破的蛋蛋']);
// 调用静态方法
$str .= call_user_func_array(['Person', 'age'], [18]);
// 下面的用法跟上面相同
// $str .= call_user_func_array('Person::age', [18]);
echo $str; // My name is 残破的蛋蛋,年龄是:18岁。
八、静态变量
通常函数中的变量随着函数的调用结束就会自动销毁了,通过下面的案例我们可以得出这个结论:function demo1 () {
$i = 1;
echo "$i <br>";
$i++;
}
demo1(); // 1
demo1(); // 1
demo1(); // 1
demo1(); // 1
以上代码,无论调用多少次demo1()函数结果都是输出1,说明在第2、3、4次调用函数中并没有执行到$i++,每次函数调用都是从$i = 1开始的。如果我们想要让结果保留到下次调用,那么就需要使用到静态变量了,示例如下:function demo2 () {
static $i = 1;
echo "$i <br>";
$i++;
}
demo2(); // 1
demo2(); // 2
demo2(); // 3
demo2(); // 4
以上结果分别输出了1、2、3、4,说明函数中的静态变量不会随函数调用结束而消失,而是进入到了下一次的函数调用中,这种场景可以应用在函数的多次调用中的数据共享/数据通信。java好学吗?
在下是985硕士一枚,本科是非科班,所以研究生期间花了两年时间自学Java,最后在校招拿到了BAT等大厂的研发offer,恰好我最近写了四篇Java工程师学习指南,讲述了如何从入门到进阶学习Java,也是我自己两年以来学习java的一些心得体会。
如果想成为专业的Java后端工程师,自学是要花需要时间和精力的,那么如何进行入门的呢。问题问的是如何入门,那么我决定选择前两篇文章来回答这一问题,分别是如何学习Java基础知识,以及如何开始做一个Java Web项目
接下来就是具体的文章,建议大家按顺序阅读,有点长,收藏的时候记得点赞或者评论哈。笔芯!
Java工程师学习指南
入门篇
最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。
所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。
先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。
本文所述的方法不一定适合所有人,如有错误敬请谅解。
01 前期准备工作
开发环境搭建
这一步我们往往会直接跳过,但既然是面向小白的教程,这里就提一下吧。首先你需要一台电脑,然后安装好JDK和JRE,JDK提供的是Java开发工具,也就是一些必备的jar包,JRE则是Java的运行环境组件,我们熟悉的JVM就在这里面。
安装好这两个东东之后,一般还要配置一下环境变量,否则有一些目录可能无法被正确找到。
IDE选择和安装
IDE指的就是本地开发编辑器,没有了它,你就只能直接在记事本这类工具里敲代码了。IDE最大的好处就是整合了大量的工具和功能模块,让你非常轻松地完成开发。
以前大家都用eclipse,不过eclipse已经不流行了,现在我推荐你直接用intellij idea作为你的第一个代码编辑器。如果是用过eclipse的同学,基本上也可以无痛切换。
intellij idea可以直接在官网上下载,试用版30天,如果想要永久使用,网上也有一些办法滴。
关于jar包
jar包是什么,其实就是将一堆class格式文件打包,Java中把它称为jar包,这些jar包在编译器中能被直接识别,让开发者使用。
对于新手来说,可能只需要用到JDK自带的一些API,但是如果你要引用外部jar包,可能就会遇到一些困难了。对于idea来说,导入外部jar包有两种办法,一种是手动导入jar包,一种是使用maven。后者会在Java Web相关的文章中讲起。
手动导入jar包其实也不难,你需要先下载好jar包,然后在对应的项目下选择导入jar包即可,具体的方法这里就不展开说了,因为在网上都找得到。
02 学习Java基础的几种方法
了解基础语法
学习一门语言,最开始要做的事情就是学习它的语法。我最早学习Java语法是在Runoob,这个网站可以让你对任意一门语言完成最快速的语法入门,当然,这只是相当于你浏览了一遍基础语法。
想要真正掌握Java语言基础,光看基础语法还远远不够,我在大三第一次接触Java课程,听老师讲面向对象三大特征听得一头雾水,连数组的初始化方式都理不清楚,但这些内容都是我们需要掌握的。所以,为了学好Java基础,我们还需要看视频或者看书进行学习。
看视频
视频的话,可以到极客学院或者慕课网听Java基础课程,当然也可以看我分享的Java视频课程。大家也都知道,现在Java的培训班非常多,基本上学的东西也都大同小异,不过它们的有些课程还不错,大家有渠道的话也可以去看一看。
看视频的好处是你可以更好地接收知识,同时也会耗费你更多实践,所以,有时候你也可以选择看书。
看书
看书的话,对于小白来说不推荐太复杂的书,比如《Java编程思想》这种书,新手千万不要看。我个人建议,你只需要先看看《Java入门到精通》这种类型的书就足够了,因为这个部分的学习只是为你后面的学习开个头,你以后可能还要回过头来重新研究这些内容。
现在市面上介绍Java基础的书籍实在太多了,质量参差不齐,内容同质化严重,笔者看过的其实也不多。给大家一个建议,你只需要挑一两本书来看即可,这里推荐两本最简单的吧,《head first java》和《Java从入门到精通》。
看博客
这里再推荐另一种学习方式,就是看博客,博客比起书籍来说,更适合对于某个技术点的学习,你可以很容易地在网上找到这个知识点相关的原理,实现方法,以及代码范例。
我的博客里没有讲解特别基础的东西,如果你看一些比较基础的文章,可以到Runoob等网站上查看。如果你有一个很明确的知识点想要学习,相信搜搜引擎会给你更好的答案。
代码实践
除此之外,一般的Java书籍或者视频课程都会要求你相应完成一些练习题,这部分内容你需要自己在电脑里使用IDE完成。
在IDE里,你可以很好地熟悉Java语言的使用,基本代码的实现,同时可以尝试各种各样的API,并且测试一些语言特性,比如继承,封装,多态等等。
另外,这也是你熟悉IDE的一个好机会,因为在公司里做开发可能要用到IDE各种各样的功能,提前熟悉好IDE绝对是有益无害的。
03 Java入门必备知识点梳理
在Java入门阶段,你可能需要接触到以下这部分知识,不管你是从通过哪种方式学习,这些内容都是你学习Java基础时绕不过的重点。
Java基础知识
这部分内容是你必须要掌握的内容,在入门阶段你需要把这些基础打扎实,以便于在学习后面的内容时可以更上一层楼。
如何把基础打扎实呢,最好的办法就是在IDE上把书上或者视频上的每个例子都实现一遍,当然有的时候你也可以自己写一些有意思的例子。
1 基本数据类型
比如int,double,char,以及其包装类。
熟悉基本数据类型的使用,了解每种类型所占的字节数,以及它们和包装类之间的相互转换。
2 流程控制
比如for循环,if else,while循环等等
如果是学过c语言的同学,这部分可以跳过了。
3 字符串类型String的使用
字符串类型是Java中很重要的类型,它不是基本数据类型,但却很常用,熟悉和实践String相关的api,开始你对字符串的学习吧。
4 数组
数组的初始化方式有哪些,二维数组应该怎么写,把数组当成方法参数又该怎么处理?
5 类和对象
Java中最重要的两个概念:类和对象,它们有什么用呢,有什么区别和联系呢,请在代码中实践它们吧。
Java核心技术
对于这部分内容,我相信很多小白只能了解它们的基本使用方法,但是并不明白其背后的一些原理:比如为什么接口和抽象类有这些区别,多态的意义是什么,为什么要有反射。
新手在学习这部分内容时,只需要知道怎么用就可以了。当然,你最好把这些特性都实现一遍,以加深印象。
至于为什么有这些特性,这些特性背后的原理是什么,不是我们现在讨论的内容,这些内容我们将在初级和中级篇中讲述。因为,要了解这些原理,你得了解JVM,了解并发技术的基础,了解网络基础,甚至更多。显然,这不是你现在能做到的。
1 接口和抽象类
写一些接口,同时写一些实现类去实现这些接口,并且了解一下为什么我们需要接口,为什么子类需要实现接口里的方法。
同理,去实现一些抽象类吧。然后,看看它和接口有什么不同。
2 继承,封装和多态
如何理解继承,子类和父类之间有什么联系呢。
封装是一种保护代码的方式,有哪些方式可以实现封装呢。
多态一般分为重载和重写,它们分别怎么使用?
3 异常处理
Java中的异常处理主要用于捕获和处理错误,请你写一些try catch代码块去捕获错误吧。
4 集合类
集合类是我们经常需要打交道的东西,List,Map,Set等等,赶快去熟悉API,然后写一些测试例子吧。
5 IO输入流和输出流
IO输入流和输出流可以操作文件,网络数据等内容,如何在Java代码中完成这么复杂的操作呢,其实只需要简单的几个api就可以了。
6 多线程
为了让系统资源最合理地分配和调度,我们需要多线程,多线程会让程序变得有趣,也会带来很多问题,使用Thread和相关API,去尝试这些有趣的事情吧。
可选内容:
1 反射(了解即可,不是入门必须)
2 枚举类型和泛型(了解即可,不是入门必须)
3 网络通信(了解基本的socket使用即可,需要网络基础)
4 数据库操作(了解基本的JDBC即可,需要数据库基础)
04 总结
总而言之,对于一个Java小白来说,入门Java可以分为这几步:
1 首先搭建好Java开发环境 2 通过Runoob等一些网站熟悉Java的基本语法 3 通过看书看视频等方式熟悉Java基础知识,通过代码实践加深理解 4 通过看书看视频等方式初步了解Java核心技术,通过代码实践加深理解。本文主要是为大家提供一个学习的思路,以及推荐一些学习方法,如果你能够按照这样的步骤去学习,并且配合上一些适合你自己的学习方法来完成学习计划,相信你可以很好地完成对Java的入门。
微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜(关注公众号后回复”Java“即可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源)Java工程师学习指南
初级篇
最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。
所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是,小白同学如何入门Java。
先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。
本文所述的方法不一定适合所有人,如有错误敬请谅解。
01 Java Web项目指南
jav在上一篇文章中,我们讲到了入门Java的几个步骤,先搭建好环境,然后熟悉基本语法,接着熟悉Java的一些核心技术,并且在代码中进行实现。
如果你已经完成了这部分内容的学习,应该会感觉自己对Java已经有一定了解了,可以轻松地写出一些Java代码,比如实现多线程输出数字,再如操作IO流等等。
当然,这些代码通常只是一些demo,我们在实际的项目中可能并不会这么简单地使用这些技术,我们可能会同时使用集合类,多线程,以及操作数据库的API。
所以,在今天的初级篇中,我们就来谈谈怎么做项目吧。
Java Web项目
对于大部分Java新手来说,最适合他们入门的项目就是Java Web了。因为Java天然适合做Web应用,并且生态完善,更有很多开源的工具和框架去支撑这些应用,比如Spring,Hibernate,SpringMVC等等。
那么,如何开始着手做一个Java Web项目呢。个人认为最好的方式就是看视频了。因为,看书的话,很多内容比较过时,并且一般不会提供源代码。也有一些大佬喜欢推荐开源的项目(在GitHub上面的项目),但是对于小白来说,如果没有很完整的文档去指导他们,那也是毫无意义的。
曾几何时,Java Web的项目还在使用JSP + Servlet进行开发,后来出现了Struts2,再后来,出现了我们现在也一直在用的SpringMVC,说实话,不论使用哪种开发框架,你都需要先花一些时间去学习相关的技术,否则你会发现,即使是看视频,你也不知道里面在讲什么。
要想做好一个JavaWeb项目,你不仅需要一个好的项目课程,还需要足够的知识储备,下面就让我们来理一理这些内容把。
知识储备
Java基础部分的内容咱们上次说过了,这里就不再重复啦~下面我们分别来说说其他几方面的知识储备把
02 前端知识
推荐资源:在w3cschool学习html,css和js,支持在线测试代码。
既然是做Web,就难免要涉及到前端技术,不过,现在前后端分离已经是一种趋势,所以,如果你对前端不感兴趣,也没必要花太多时间去学习。
对于大部分同学来说,你最好要了解html的基本标签和格式,自己能够写一些简单页面,CSS的话,也可以稍微接触一些。相对于前面两个服务于样式的技术,我们倒是更应该去学习一下JavaScript,了解它的一些基本语法,以及ajax的使用,因为在前后端交互时,ajax是非常重要的。
所以,做一个Java Web项目,你不需要花太多时间在写前端页面上,如果有源代码可以直接使用,当然,对于一些需要修改的前端页面,你得怎么去做修改它,因为有时候你需要使用JSP,JSP既包括前端代码也包括Java代码,如果你完全看不懂前端代码的话,那就很尴尬了。
03 Java Web常用技术
JavaWeb的技术栈其实比较庞大,所以我们不要求面面俱到,只是希望你能够熟悉一下项目中可能用到的技术。下面列举一些常见的技术,大家最好要了解一下。
1 JSP和Servlet
推荐资源:《JavaWeb入门到精通》,慕课网、极客学院等网站上的JavaWeb基础课程
这是Java Web开发最原始的形态,现在很少直接使用了,但是后来的各种框架其实也是建立在servlet之上来做的。你们需要了解这两个技术分别是用来干什么的,最好能写一些demo来实践。
对于JSP,有时候你可能还要学习jstl等标签语言,因为这些标签可以让你更方便地往JSP中插入Java代码。
2 Spring和SpringMVC
推荐资源:《Spring实战》,慕课网、极客学院等网站上的SpringMVC基础课程。
事实上,除了上述资源之外,你也可以直接到官网上查看快速开始文档。
Struts2早已被时代抛弃,Spring则是当今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,并且学会在项目中使用它。
由于SpringBoot最近很火,并且搭建方式比SpringMVC更简单,你也可以先学习SpringBoot,以便更快速地搭建起你的第一个Java Web项目。
3 MySQL
推荐资源:《Sql必知必会》,Runoob上的MySQL基础教程,慕课网、极客学院等网站上的视频课程
一个JavaWeb应用一定要有数据啊,所以我们需要用到数据库,其实搭一个mysql数据库是非常简单的,但是对于初学者来说最麻烦的就是写sql了,所以,先学会建表,熟悉sql,对你以后做项目也是大有裨益的。
4 Hibernate和Mybatis
推荐资源:Runoob上的Hibernate和Mybatis基础教程,慕课网、极客学院等网站上的视频课程
当你学会了使用sql去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的,它可以让一张表和Java类一一对应,让数据查询变得非常方便。Hibernate和Mybatis都是orm框架,只不过现在mybatis越来越火了。
所以,你需要了解这一技术,因为它会广泛地运用到大部分Java Web项目中。
5 Maven
推荐资源:《maven实战》,易百教程里的maven教程,慕课网、极客学院等网站上的视频课程
刚才咱们已经说过了Spring,orm框架,以及MySQL等方面的技术了。实际上,一个简单的Java Web项目也只需要这些东西了。
但是,有一个问题,就是:一个项目里用到这么多技术,所需要的jar包也会很多,我们如何管理这些jar包呢。如果直接导入所需jar包,那当jar包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当jar包很多时,项目打包后的war格式文件也会很大,不利于传输。
为了解决上述问题,maven应运而生了。maven通过pom.xml文件来指定所需的jar包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。
当然,新手可能还难以理解这些概念,你必须要知道的是,大部分Java Web项目需要用maven来管理,你需要学会maven的基本用法,最基本的用法就是:学会修改pom.xml文件。
6 Tomcat
推荐资源:慕课网、极客学院等网站上的视频课程。
对于小白来说,Tomcat相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装Tomcat即可。毕竟,它在项目中的作用就是提供一个运行环境而已。
正常来说,你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat,所以一般情况下你都可以在IDE中配置好你的Tomcat路径,然后设置好你的项目路径,IDE会自动把你的工程代码部署到Tomcat服务器上。
如果你使用想跳过IDE直接部署工程到Tomcat上,也可以直接编译工程并且打包得到war格式的文件(这个步骤可以使用maven来完成),然后拷贝war文件到Tomcat下的特定目录即可。
上述两种部署方式的详细步骤请到搜索引擎寻找答案。
7 Git和GitHub
推荐资源:廖雪峰的Git教程,GitHub官网,慕课网、极客学院等网站上的视频课程。
既然要做项目,为什么不把它发布在GitHub上。当你熟悉了Git指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到GitHub上,这样既可以让你更好地管理项目版本,又可以让你GitHub更加活跃,为你未来的面试加分。
所以,赶紧学好Git指令,然后开启你的项目之旅吧。
04 其他常用组件
除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。
1 日志系统
当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有log4j,logging等等,另外你还需要了解一下slf4j。
2 单元测试
日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是JUnit,建议你找个文档看一看,然后下载下来玩一下。
3 JSON
JSON逐渐成为前后端数据交互的标准格式,为了在项目中使用JSON的API,你也需要导入它的jar包,一般我们都会使用阿里提供的fastjson,赶快下载来玩一玩吧。
当然,常用的Java Web组件还有很多,比如HTTPClient,再比如一些加密工具,一些压缩工具等等,这里就不再一一列举了。
5 总结
今天的内容就到这里了,与其说是初级篇,反而更像是“项目篇”呢。因为学完基础内容之后,做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开,也就不足为奇了。
今天我们主要讲的是,做好一个JavaWeb项目,需要哪些知识储备,需要了解哪些技术,并且我也推荐一些比较精品的视频课程。
后面我还会写一篇文章,专门讲一讲怎么做项目,会更加详细,更加侧重怎么去做,敬请期待吧。
总结以下今天说的几个要点吧:
1 Java基础知识储备 2 前端知识储备 3 了解和使用JavaWeb常用技术 4 JavaWeb常用组件介绍 5 视频课程推荐俗话说的好,磨刀不误砍柴工,相信你看了本文之后,可以更好地做好知识储备,然后开始Java Web的项目实践,希望你能够顺利地完成你的第一个项目。
微信公众号个人公众号:程序员黄小斜
黄小斜是 985 硕士,阿里巴巴Java工程师,在自学编程、技术求职、Java学习等方面有丰富经验和独到见解,希望帮助到更多想要从事互联网行业的程序员们。 作者专注于 JAVA 后端技术栈,热衷于分享程序员干货、学习经验、求职心得,以及自学编程和Java技术栈的相关干货。 黄小斜是一个斜杠青年,坚持学习和写作,相信终身学习的力量,希望和更多的程序员交朋友,一起进步和成长!
原创电子书: 关注微信公众号【程序员黄小斜】后回复【原创电子书】即可领取我原创的电子书《菜鸟程序员修炼手册:从技术小白到阿里巴巴Java工程师》这份电子书总结了我2年的Java学习之路,包括学习方法、技术总结、求职经验和面试技巧等内容,已经帮助很多的程序员拿到了心仪的offer!
程序员3T技术学习资源: 一些程序员学习技术的资源大礼包,关注公众号后,后台回复关键字 “资料” 即可免费无套路获取,包括Java、python、C++、大数据、机器学习、前端、移动端等方向的技术资料。
技术公众号:Java技术江湖
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的微信公众号【Java技术江湖】
这是一位阿里 Java 工程师的技术小站。作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!
Java工程师必备学习资源: 关注公众号后回复”Java“即可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源