说来惭愧,作为计算机专业的都不会Java,现在遇到任务了还得“从头开始”。当然,由于有其他语言的基础,所以比真的从零开始还是要容易一些。今天和一位同学也简单聊了一下,他现在也是各种语言切换,跟我分享了一下他的经验:
- 学新的语言时,和自己掌握的语言做对比,看看新语言的相关用法是否有对应的用法。
- 看别人的代码,刚开始可能不会写,但是因为有编程基础所以基本能看懂别人怎么写的。(这里就突出好的编程习惯和风格是多么重要)先把别人的代码copy过来,然后根据自己需要进行改动。
- 多练习。熟能生巧在哪都适用。
本周我也基本是这样过来的。另外,因为上周我知道自己这周要开始写Java,因此趁双休恶补了一些基本语法和基础,感觉还是很有帮助的。在此推荐中国大学MOOC上浙江大学翁恺老师的两门课:《零基础学Java语言》和《面向对象程序设计——Java语言》。翁老师的课非常清晰,而且以实例进行讲解,所以也很适合自己练习。《零基础学Java语言》中即使对一些看似简单的问题也会说明,课程里还有软件下载和安装的步骤说明,真正的无门槛;已经有其他语言基础的可根据自己实际情况进行选择或者快速浏览一边。课程中安装的只是jre,因为课程中只涉及到一些基本用法,所以jre是可以的,但实际开发还是安装jdk。具体jre和jdk的区别《面向对象程序设计——Java语言》经常用一些简单的例子来阐述面向对象的思想,以及一些设计原则,让我受益匪浅。
本周学到的新用法
1. @Getter 、@Setter
这两个的用法是在创建类时,方便写get和set函数。
添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
public class Person {
@NotNull(message = "Name 不应该为空")
@JSONField(name="Name")
private String name;
@JSONField(name="Age")
private int age;
@JSONField(name="Sex")
private String sex;
public Person(String name) {
this.name = name;
}
public Person(String name, String sex) {
this.name = name;
this.age = 18;
this.sex = sex;
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
当我在类上添加@Getter、@Setter,可以通过IDE生成下面的get或set函数。虽然有文章说直接就可以访问get或set函数,但是我没成功。
2. 注解 @NotNull
可以看到上面已经有@NotNUll的注解,在上面的例子中只是起到了注解的作用。不过通过触发valid可以抛出异常,但是我没有成功,暂时作为问题留下来。其他的还有:
@Null 被注释的元素必须为null
@NotNull 被注释的元素不能为null
@NotEmpty 被注释的字符串必须不为null且size>0
@NotBlank 被注释的字符不能为null且不能为空字符串
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min) 被注释的元素的大小必须在指定的范围内。
@Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式。
@Email 被注释的元素必须是电子邮件地址
@Length 被注释的字符串的大小必须在指定的范围内
@Range 被注释的元素必须在合适的范围内
3. Json解析
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
parseArray、parseObject、toJSONString
String jsonStr = "[{\"name\":\"Tim\",\"age\":25,\"sex\":\"male\"},{\"name\":\"Tom\",\"age\":28,\"sex\":\"male\"},{\"name\":\"Lily\",\"age\":15,\"sex\":\"female\"}]";
List<Person> persons = JSONArray.parseArray(jsonStr, Person.class);
Person person = JSONObject.parseObject("{\"name\":\"Tim\",\"age\":25,\"sex\":\"male\"}", Person.class);
// 注意与上面的区别
JSONObject object = JSONObject.parseObject("{\"name\":\"Tim\",\"age\":25,\"sex\":\"male\"}");
String name = object.getString("name");
Person p = JSONObject.parseObject("{\"name\":\"Tim\",\"age\":25,\"sex\":\"male\"}", Person.class);
String strP = JSONObject.toJSONString(p);
@JSONField
//第一种
String jsonStr = "[{\"name\":\"Tim\",\"age\":25,\"sex\":\"male\"},{\"name\":\"Tom\",\"age\":28,\"sex\":\"male\"},{\"name\":\"Lily\",\"age\":15,\"sex\":\"female\"}]";
List<Person> persons = JSONArray.parseArray(jsonStr, Person.class);
//第二种,可以发现与第一种的结果一样
String jsonStr1 = "[{\"Name\":\"Tim\",\"Age\":25,\"Sex\":\"male\"},{\"Name\":\"Tom\",\"Age\":28,\"Sex\":\"male\"},{\"Name\":\"Lily\",\"Age\":15,\"Sex\":\"female\"}]";
List<Person> persons1 = JSONArray.parseArray(jsonStr1, Person.class);
构造函数的问题
String jsonStr5 = "[{\"name\":\"Tim\",\"sex\":\"male\"},{\"name\":\"Tom\",\"sex\":\"male\"},{\"name\":\"Lily\",\"sex\":\"female\"}]";
List<Person> persons5 = JSONArray.parseArray(jsonStr5, Person.class);
得到的结果,persons5中所有的对象age=0,不明白为什么没有走第二种(含2个参数)的构造函数呢?当含有3个参数的构造函数被注释后,age可以被赋值为18。
4. 依赖冲突
当发生依赖冲突时,执行mvn dependency:tree,查看依赖树,可以看冲突在哪里;然后去掉其中一个依赖即可。
6. 关于JRE、JDK的区别
简单点说,JRE提供了运行环境,JDK是运行环境+开发环境。因为Java是编译型语言,先编译后运行,运行环境和开发环境是分开的。在浙大翁老师的课程中只安装了JRE,程序可以正常编程和运行,这是因为JRE里也有个lib库,里面包含了Java核心类库,也就是说可以满足基本需求。具体更详细的解释可以学习资料 浅谈JDK、JRE、JVM区别与练习
网友评论