贤弟酱

贤弟酱 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织 moexian.com 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

贤弟酱 关注了标签 · 6月10日

java

Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

Java编程语言的风格十分接近 C++ 语言。继承了 C++ 语言面向对象技术的核心,Java舍弃了 C++ 语言中容易引起错误的指針,改以引用取代,同时卸载原 C++ 与原来运算符重载,也卸载多重继承特性,改用接口取代,增加垃圾回收器功能。在 Java SE 1.5 版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对 Java 语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”。

版本历史

重要版本号版本代号发布日期
JDK 1.01996 年 1 月 23 日
JDK 1.11997 年 2 月 19 日
J2SE 1.2Playground1998 年 12 月 8 日
J2SE 1.3Kestrel2000 年 5 月 8 日
J2SE 1.4Merlin2002 年 2 月 6 日
J2SE 5.0 (1.5.0)Tiger2004 年 9 月 30 日
Java SE 6Mustang2006 年 11 月 11 日
Java SE 7Dolphin2011 年 7 月 28 日
Java SE 8JSR 3372014 年 3 月 18 日
最新发布的稳定版本:
Java Standard Edition 8 Update 11 (1.8.0_11) - (July 15, 2014)
Java Standard Edition 7 Update 65 (1.7.0_65) - (July 15, 2014)

更详细的版本更新查看 J2SE Code NamesJava version history 维基页面

新手帮助

不知道如何开始写你的第一个 Java 程序?查看 Oracle 的 Java 上手文档

在你遇到问题提问之前,可以先在站内搜索一下关键词,看是否已经存在你想提问的内容。

命名规范

Java 程序应遵循以下的 命名规则,以增加可读性,同时降低偶然误差的概率。遵循这些命名规范,可以让别人更容易理解你的代码。

  • 类型名(类,接口,枚举等)应以大写字母开始,同时大写化后续每个单词的首字母。例如:StringThreadLocaland NullPointerException。这就是著名的帕斯卡命名法。
  • 方法名 应该是驼峰式,即以小写字母开头,同时大写化后续每个单词的首字母。例如:indexOfprintStackTraceinterrupt
  • 字段名 同样是驼峰式,和方法名一样。
  • 常量表达式的名称static final 不可变对象)应该全大写,同时用下划线分隔每个单词。例如:YELLOWDO_NOTHING_ON_CLOSE。这个规范也适用于一个枚举类的值。然而,static final 引用的非不可变对象应该是驼峰式。

Hello World

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

编译并调用:

javac -d . HelloWorld.java
java -cp . HelloWorld

Java 的源代码会被编译成可被 Java 命令执行的中间形式(用于 Java 虚拟机的字节代码指令)。

可用的 IDE

学习资源

常见的问题

下面是一些 SegmentFault 上在 Java 方面经常被人问到的问题:

(待补充)

关注 105235

贤弟酱 回答了问题 · 2019-05-30

vuecli3如何优雅按需引入element?

可以完整引入

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

如果需要按需引入

import { Button, Select } from 'element-ui';
Vue.use(Button).use(Select);

use支持链式调用的

关注 6 回答 4

贤弟酱 回答了问题 · 2019-05-30

解决vue如何渲染websocket数据

也可以用es6箭头函数

ws.onmessage = (evt) => {
    console.log(this.marketTrades);
}

关注 3 回答 2

贤弟酱 回答了问题 · 2019-05-30

php 开发自己网站的官方插件 用什么框架比较好

目前网站有用框架嘛?有的话框架应该带的有hook机制,照着写不就行了。

关注 5 回答 5

贤弟酱 关注了用户 · 2019-05-29

CrazyCodes @crazycodes

https://github.com/CrazyCodes... 我的博客
_
| |__ __ _
| '_ | | | |/ _` |
| |_) | |_| | (_| |
|_.__/ __,_|__, |

         |___/   感谢生命可以让我成为一名程序员

                         CrazyCodes To Author

关注 4666

贤弟酱 关注了用户 · 2019-05-29

踏雪无痕S @taxuewuhens

PHPer码农

关注 474

贤弟酱 关注了用户 · 2019-05-29

什么都只会一点点 @xspdebug

非著名的CURD程序员。

csdn博客: https://blog.csdn.net/qq_3617...

关注 9

贤弟酱 赞了文章 · 2019-05-23

谈谈 PHP 中的类型约束

起点

众所周知,PHP 是弱类型语言,与其他强类型语言项目,在这方面会有很多的坑,但是已经发展到 PHP 7 之后,PHP 也对类型约束有了所指,并且在许多流行框架中被大量使用比如Laravel,因为这确确实实在软件开发过程中无论是运行,还是 IDE 的代码提示都能为我们带来极大的便利,下面就一步步来看看 PHP 中的类型约束。

早期的约束

虽然 PHP 是隐式转换,但是在实际开发中也会存在一些无法转换的窘境,当然这些问题我们在开发阶段很容易发现,但是如果是一些动态的内容导致不可控就会呈现在用户面前,也就是 BUG ,在 PHP 中有一批以 is_* 开头的方法用来做一些简单类型判断(这其中一些方法也是新方法没有翻译的基本都是)。

  • is_array — 检测变量是否是数组
  • is_bool — 检测变量是否是布尔型
  • is_callable — 检测参数是否为合法的可调用结构
  • is_countable — Verify that the contents of a variable is a countable value
  • is_double — is_float 的别名
  • is_float — 检测变量是否是浮点型
  • is_int — 检测变量是否是整数
  • is_integer — is_int 的别名
  • is_iterable — Verify that the contents of a variable is an iterable value
  • is_long — is_int 的别名
  • is_null — 检测变量是否为 NULL
  • is_numeric — 检测变量是否为数字或数字字符串
  • is_object — 检测变量是否是一个对象
  • is_real — is_float 的别名
  • is_resource — 检测变量是否为资源类型
  • is_scalar — 检测变量是否是一个标量
  • is_string — 检测变量是否是字符串
  • is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
  • is_subclass_of — 如果此对象是该类的子类,则返回 TRUE

在 PHP 5 之前,如果我们要做类型约束,那么就必须用到这些,这些方法对参数进行复杂的判断,并处理错误返回给调用者。

但是在 PHP 5 以来,在面向对象中,为方法带来了类型约束,然而这些都非常的鸡肋,从文档上可以看到。

  • PHP 5 支持 对象接口
  • PHP 5.1 支持 数组
  • PHP 5.4 支持匿名函数
  • 类型约束不能用于标量类型如 intstringTraits 也不允许。

在 PHP 5 中其实光是第一条,就够大部分场景使用,但是也有一些致命问题,比如最后一条的 不支持标量类型 ,也就是说支持不是很全面,而且还有一种情况没有考虑 那就 null 虽然 null 是一个特殊类型,但是有时候当数据不可控时也会出现,而且,在 PHP 5 阶段,类型约束并没有被很好的使用,或许是那个时候并不是那么的重视,毕竟弱类型是 PHP 的一大特点,但也是致命伤,甚至很多时候被强类型语言牵着鼻子走。

PHP 7

PHP 7 相对于先前的PHP版本可谓是焕然一新。

比较扎眼的就是完善了对类型限制的支持,补上了之前的短缺,包括标量类型返回值类型,而且,在 PHP 7.1 中还加入了严格类型验证

强制类型验证

strict_types/declare()指令

  • 默认情况下,所有的PHP文件都处于弱类型校验模式。新的declare指令,通过指定strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。
  • declare(strict_types=1)必须是文件的第一个语句。如果这个语句出现在文件的其他地方,将会产生一个编译错误,块模式是被明确禁止的。
  • 类似于encoding指令,但不同于ticks指令,strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件。该指令在运行时编译,不能修改。它的运作方式,是在opcode中设置一个标志位,让函数调用和返回类型检查符合类型约束。

举个🌰

// 非严格模式
// 1️⃣
function testInt():int{
    return 0.01;
}
// 2️⃣
function testStr():string{
    return true;
}
// 3️⃣
function testBool():bool{
    return "1";
}
// 4️⃣
function testInt2():int{
    return "1string";
}

如你所见,上面的代码 通通都没有问题,都不会出现异常,甚至在部分 PHP 7.2 以下的版本中,4️⃣都是可以通过的。这是因为 PHP 7 虽然有了严格类型验证,但是默认情况下并没有启用,而是需要手动去启用,如果手动设置启用了之后,返回或者传递的参数不符合声明的类型,那么 PHP 会直接抛出一个 TypeError 错误,要求你去处理。启用强制类型验证 只需要在 PHP 文件的顶部加入以下代码即可。

declare(strict_types=1);

后话

类型验证不但有利于我们的程序在运行过程中所得到和返回的参数都是完全符合预期的并且还有另一个好处,那就是开发工具中的类型提示。

有时候可能会到一个情况,某个方法传递了一个参数为对象,里面有一些方法,但是 IDE 就是不提示。

interface UserInfo{
    getSex();
}
interface User{
    getUserInfo();
    getUserId();
    getUserName();
}
function getUserSex($user){
    // 你会发现 在这里 IDE 并不能很好的给你提示代码,和一些可以用的方法
    return $user->getUserInfo()->getSex();
}
class VipUser importants User(){
    // TODO .....
}
getUserSex(new VipUser());

这种情况下就 2 个解决方案了,如果你是项目,因为自 PHP 5 开始就支持对象的类型声明了,所以这里就不是那么担心,直接声明类型就好了。

function getUserSex(User $user){
    // 这里就可以提示了 
    return $user->getUserInfo()->getSex();
}

当然 还有方法就是使用 PHPDoc,即注解方案,这个方案已经在 PSR-5 中,虽然还没有完全通过,但是在 早期也有 PHPDoc 的一些 unofficial 的,而且主流 IDE 已经完全实现了,来协助我们提高开发体验。

最后

总结一下,PHP 中接近完善的 类型约束,让我们之前的一些不可能变成了可能,让一些不可靠变的更加的可靠,降低了代码中一些因为类型约束而导致的问题,从源头提升了在开发工具中的开发体验 。

参考资料

PHP7类型提示:作为PHP开发者应该永远铭记

查看原文

赞 13 收藏 10 评论 2

贤弟酱 关注了用户 · 2019-05-05

刘羽冲 @liuyuchong

破庙中神易,破心中神难。 当人类第一次仰望天空的时候,就已经有罪!

关注 282

贤弟酱 关注了专栏 · 2019-03-19

知行合一

让我们来猎杀那些陷入黑暗中的人吧...

关注 10

贤弟酱 关注了用户 · 2019-03-14

唯一丶 @weiyi_5b04fb4aa815a

关注 135

贤弟酱 关注了专栏 · 2018-12-24

终身学习者

我要先坚持分享20年,大家来一起见证吧。

关注 40757

贤弟酱 关注了用户 · 2018-04-25

justjavac @justjavac

会写点 js 代码

关注 14442

贤弟酱 关注了用户 · 2018-04-25

善良的乌贼 @chenyinkai

我的github(给个star吧~~) https://github.com/chenyinkai

我的博客 http://www.cykspace.com

关注 8193

贤弟酱 关注了用户 · 2018-04-25

某熊猫桑 @marsgt

承认自己做不到,坦诚自己不够好。

关注 19695

贤弟酱 关注了用户 · 2018-04-25

yuanxiaowa @yuanxiaowa

循规蹈矩太无聊了,要的就是颠覆

关注 23732

贤弟酱 关注了用户 · 2018-04-25

wmaker @wmaker

保持节奏。

关注 2678

贤弟酱 关注了标签 · 2018-04-25

关注 64811

贤弟酱 关注了标签 · 2018-04-25

前端

Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征。在互联网的演化进程中,网页制作是Web 1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主。2005年以后,互联网进入Web 2.0时代,各种类似桌面软件的Web应用大量涌现,网站的前端由此发生了翻天覆地的变化。网页不再只是承载单一的文字和图片,各种富媒体让网页的内容更加生动,网页上软件化的交互形式为用户提供了更好的使用体验,这些都是基于前端技术实现的。

Web前端优化
  1. 尽量减少HTTP请求 (Make Fewer HTTP Requests)
  2. 减少 DNS 查找 (Reduce DNS Lookups)
  3. 避免重定向 (Avoid Redirects)
  4. 使得 Ajax 可缓存 (Make Ajax Cacheable)
  5. 延迟载入组件 (Post-load Components)
  6. 预载入组件 (Preload Components)
  7. 减少 DOM 元素数量 (Reduce the Number of DOM Elements)
  8. 切分组件到多个域 (Split Components Across Domains)
  9. 最小化 iframe 的数量 (Minimize the Number of iframes)
  10. 杜绝 http 404 错误 (No 404s)

关注 152749

贤弟酱 关注了标签 · 2018-04-25

程序员

一种近几十年来出现的新物种,是工业革命的产物。英文(Programmer Monkey)是一种非常特殊的、可以从事程序开发、维护的动物。一般分为程序设计猿和程序编码猿,但两者的界限并不非常清楚,都可以进行开发、维护工作,特别是在中国,而且最重要的一点,二者都是一种非常悲剧的存在。

国外的程序员节

国外的程序员节,(英语:Programmer Day,俄语:День программи́ста)是一个俄罗斯官方节日,日期是每年的第 256(0x100) 天,也就是平年的 9 月 13 日和闰年的 9 月 12 日,选择 256 是因为它是 2 的 8 次方,比 365 少的 2 的最大幂。

1024程序员节,中国程序员节

1024是2的十次方,二进制计数的基本计量单位之一。程序员(英文Programmer)是从事程序开发、维护的专业人员。程序员就像是一个个1024,以最低调、踏实、核心的功能模块搭建起这个科技世界。1GB=1024M,而1GB与1级谐音,也有一级棒的意思。

从2012年,SegmentFault 创办开始我们就从网络上引导社区的开发者,发展成中国程序员的节日 :) 计划以后每年10月24日定义为程序员节。以一个节日的形式,向通过Coding 改变世界,也以实际行动在浮躁的世界里,固执地坚持自己对于知识、技术和创新追求的程序员们表示致敬。并于之后的最为临近的周末为程序员们举行了一个盛大的狂欢派对。

2015的10月24日,我们SegmentFault 也在5个城市同时举办黑客马拉松这个特殊的形式,聚集开发者开一个编程大爬梯。

特别推荐:

【SF 黑客马拉松】:http://segmentfault.com/hacka...
【1024程序员闯关秀】小游戏,欢迎来挑战 http://segmentfault.com/game/

  • SF 开发者交流群:206236214
  • 黑客马拉松交流群:280915731
  • 开源硬件交流群:372308136
  • Android 开发者交流群:207895295
  • iOS 开发者交流群:372279630
  • 前端开发者群:174851511

欢迎开发者加入~

交流群信息


程序员相关问题集锦:

  1. 《程序员如何选择自己的第二语言》
  2. 《如何成为一名专业的程序员?》
  3. 《如何用各种编程语言书写hello world》
  4. 《程序员们最常说的谎话是什么?》
  5. 《怎么加入一个开源项目?》
  6. 《是要精于单挑,还是要善于合作?》
  7. 《来秀一下你屎一般的代码...》
  8. 《如何区分 IT 青年的“普通/文艺/二逼”属性?》
  9. 程序员必读书籍有哪些?
  10. 你经常访问的技术社区或者技术博客(IT类)有哪些?
  11. 如何一行代码弄崩你的程序?我先来一发
  12. 编程基础指的是什么?
  13. 后端零起步:学哪一种比较好?
  14. 大家都用什么键盘写代码的?

爱因斯坦

程序猿崛起

关注 110726