Java自学者的第一篇学习笔记(有C语言基础)

记录我的第一篇CSDN博文(好像也是第一次写博客),如有不足之处还请多多指正。

本人目前计算机类大二在读,这段时间软件构造开课了,说实话老师在课上讲的基本都是高屋建瓴,真正要掌握技能还得靠自己学。那我就分享一点学了两周Java的经验吧。Java初学者可以凑合着看看。

首先分享两个链接:MIT_6.031CMU_17-214,分别是MIT和CMU的软件构造课

然后是Java的架构:Outline of the Collections Framework

Java的IDE我使用的是IDEA,当然Eclipse也是可以的。

当Java的基本环境配置完以后,你就可以开始真正了解这一门语言了。首先,它跟C语言最大的一点不同,直观上来说,就是C代码的主体是函数,而Java是类,在Java中你不能直接写一个main函数然后输出"Hello World!",你必须先定义一个类,例如myClass:

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

注意,每个Java文件只能有一个public类,名字与Java文件名相同。main方法(相当于C语言中的main函数)位于该类中,至于为何要以public static void修饰,可以参考main方法为什么要写成:public static void main(String [] args){}?

System是Java.lang包中的一个类,相当于C语言库中的一个函数。out是System的一个成员变量,数据类型是PrintStream,含有println方法。其具体功能为输出一个字符串并换行。

接下来我们可以完成一些其他的任务了。首先,如果需要读一个文件,我们可以使用:

BufferedReader br = new BufferedReader(new FileReader(fileName));

BufferedReader类包含很多成员方法,常用的有read、readline、close。其中read方法读入一个整型数据,readline方法读入一整行,close方法关闭文件。具体实现如:

String myLine = br.readLine();

对字符串的处理,例如如果我们要将字符串以制表符分割,可以使用split方法:

String[] a = myLine.split("\t");

该方法的返回值是字符串数组,注意,Java中的习惯是String[] a,而不是像C++中的string a[]。

数组的定义(以整型为例):

//m、row、col均已被定义并赋值
int[] a = new int[n]; //一维数组
int[][] b = new int[row][col]; //二维数组

Java中还有一个正则表达式的概念。如果我们想表示一类字符串,我们可以用一个表达式描述。例如所有非负整数可以表示为[0-9]+,注意,这里的+并不是正的意思,而是相当于自动机理论中的上标+,意为一个或多个。判断可用如下语句:

//a是已被定义并赋值的String类型变量
if (a.matches("[0-9]+")) System.out.println("Match!");

matches是String类的一个成员方法,返回值是boolean型(相当于C++中的bool)。

Java语言有异常和抛出等名词,个人理解为对用户不合法输入的处理。例如:

try {
    //尝试读入一个文件
} catch (IOException e) {
    System.out.printf("Failure to open %s!\n", fileName);
}

Java语言中如果你需要一个动态数组,可以选择List类,具体有两种实现(以整型为例):

List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new LinkedList<>();

两种实现各自的优缺点通过字面意思即可明白。注意,List后接的尖括号内必须为Integer,而不能是int。同样地,我们必须使用Boolean、Float、Double。对于其成员方法,根据方法名很容易推断其功能。其中sort方法参数常用的是Comparator类,例如:

list.sort(Comparator.comparingInt(Integer::intValue));
list.sort(Comparator.comparingInt(Integer::intValue).reversed()); //逆序

集合,栈,队列的具体实现:

Set<Integer> set = new HashSet<>();
Stack<Integer> stack = new Stack<>();
Queue<Integer> queue = new ArrayDeque<>();

如果想对一个数组a进行排序,可以使用如下语句,其中comparator有需求可以自己写,但多半使用Comparator类就足够了

Arrays.sort(a, fromIndex, toIndex, comparator);

这里假设a是一个整型数组,其中每个元素都是某个类的一个具体实现,该类中包含成员变量m。我们现在需要根据将每个元素的m作为参数传递给方法f得到的返回值对a进行排序,则可以使用如下语句:

Arrays.sort(a, Comparator.comparingInteger(o -> f(o.m)));

除了Java的一些基本方法,测试也是很重要的一部分。测试文件一般放在test目录下。在IDEA中,可以在Project Structure中修改目录类型


测试类中的测试方法前要加上@Test。测试方法中一般使用断言语句:

myClass A = new myClass([parameters]), B = new myClass([parameters]);

@Test
public void functionTest() {
    assertEqual(A.member1, B.member1);
    assertTrue(A.member2);
}

 测试前别忘了检查断言是否可行

@Test(expected = AssertionError.class)
public void testAssertionsEnabled() {
    assert false;
}

非常感谢你能看到这里,欢迎大家在评论区针对我的问题,无论是技术上的还是表达上的,作出评论,这于我而言都是莫大的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值