木同

木同 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

开发是需要工匠精神的

个人动态

木同 回答了问题 · 10月8日

分页时用到了java8新特性,问题如下图

List<?> meterList = xxx.
这条语句放在lambda作用域外面是可以的,但meterList必须是final的,即:

List<?> meterList = xxx.
...
() -> meterList

关注 4 回答 3

木同 回答了问题 · 10月8日

spring boot最全的官方文档在哪里?

官方文档就这些的,如果想找参考代码不要在文档中找,去spring boot代码仓库中找吧:https://github.com/spring-projects

关注 3 回答 2

木同 回答了问题 · 10月3日

java如何几乎同时结束两个线程

可以用线程池来控制,示例代码如下:

// 创建一个线程池,大小为2
ExecutorService es = Executors.newFixedThreadPool(2);
es.execute(new Player());
es.execute(new ReadText());
// 结束时调用线程池的shutdownNow,线程池将立刻马上终止所有线程,终止时间大概是同时的
es.shutdownNow();

至于同时启动就简单多了,用wait+notify、CyclicBarrier或Semaphore都可以达到目的。

关注 8 回答 5

木同 回答了问题 · 10月3日

工程lib包含A包,A包内包含B包,但工程内无法直接调用B包。

jar包被包含在别的jar包内是不会被扫描到的,因为java包扫描只扫目录下的jar,并不会打开jar包在jar包中扫描。因此找不到很正常,应该把B包放外面。如果最终工程打包时,也会自动把B包打进去。

关注 2 回答 1

木同 回答了问题 · 10月3日

解决java中list对象为什么能直接输出其中的元素?object的对象却不能呢?

Object[] objects = {1, 2};
System.out.println(objects);

首先,objects本身就是一个对象,是一个数组对象,其没有重载toString()方法,因此打印出来就是对象本身的类型和地址信息,这点毋庸置疑;

Object[] objects = {1, 2};
System.out.println(Arrays.toString(objects));

为什么Arrays.toString()能打印出Object的值?这个我们翻看一下源码就了然了:

// Arrays.toString()方法的源码
public static String toString(Object[] a) {
    if (a == null)
        return "null";
 int iMax = a.length - 1;
 if (iMax == -1)
        return "[]";
 StringBuilder b = new StringBuilder();
 b.append('[');
 for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));
 if (i == iMax)
            return b.append(']').toString();
 b.append(", ");
 }
}

很容易理解,Arrays.toString()相当于实现了Object[]数组对象的toString(),因此自然就能打印出值了。

关注 4 回答 3

木同 回答了问题 · 10月3日

解决Java中怎样逐行读取文件信息为object并生成linked list?

梳理一下诉求:
1、输入一个文本文件,一行一条记录,有三个属性:id,name,salary,由逗号隔开;
2、逐行读取记录,将记录存放在SalariedEmployee对象中,所有记录存放于SalariedEmployeeList容器中,并提供根据name搜索记录的方法。


核心代码如下:

// 1.读取文本文件
SalariedEmployeeList employeeList = new SalariedEmployeeList();
try(BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("your text file path")))) {
    String line = null;
    while ((line = br.readLine()) != null) {
        // line为空或者记录不够就略过
        if(line.isEmpty()) {
            continue;
        }
        String[] fields = line.split(",");
        if(fields.length() != 3) {
            continue;
        }
        SalariedEmployee employee = new SalariedEmployee(Integer.parseInt(fields[0],
        fields[1], Double.parseDouble(fields[2]);
        employeeList.add(employee);
    }
}

// SalariedEmployeeList类
// 从题主问题描述中没有看到这个类的声明,大体理解题主想要的意思是这个类本身就是一个容器,
// 可以容纳SalariedEmployee对象,最后提供一个根据name来查询Employee的方法,因此我就直接
// 将SalariedEmployeeList继承LinkedList,这样实现起来最快。
public class SalariedEmployeeList extends LinkedList<SalariedEmployee> {
    // 其他代码省略...
    // 根据name进行SalariedEmployee查询
    public SalariedEmployee findByName(String name) {
        for(SalariedEmployee employee : this) {
            if(employee.getName().equals(name)) {
                return employee;
            }
        }
        // 没有找到返回null
        return null;
    }
}

以上是代码的主要实现逻辑,应该是题主所想吧,如有问题,可以追问,望采纳,谢谢。

关注 2 回答 2

木同 回答了问题 · 10月2日

Jackson最新版本找不到TypeReference

看不全配置,判断可能是依赖冲突吧,把本地maven仓库相关jar包删除重新update一下试试。

关注 2 回答 1

木同 回答了问题 · 10月2日

limit不带order by,每次查询结果都一样吗?

这个问题有点意思,等同于是问当没有指定order by时,mysql innodb的默认排序是什么样的?
一般情况下,按照题主写的SQL语句,select*,除了id为条件以外没有别的查询条件,因此,返回的结果默认会按照id的顺序排列,如果在查询过程中表中没有插入新增、删除或者做id变更的操作,那么每次结果都是一样的。但是,任何时候都不要依赖这种默认顺序来进行有顺序、排列或者需要固定topX的业务设计,强烈不推荐,理由如下:
1、当表的索引不止主键一个时,查询依据的索引会根据查询SQL的变化而产生变化;
2、索引的算法不同,顺序也会不同;

关注 2 回答 1

木同 关注了标签 · 10月2日

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 方面经常被人问到的问题:

(待补充)

关注 107591

木同 关注了标签 · 10月2日

关注 84672

认证与成就

  • 获得 7 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 9月16日
个人主页被 156 人浏览