JavaSE学习笔记 1

        距离上次写笔记已经过去很长一段时间了,这段时间主要是做了一些关于下一步的学习准备工作,包括软件、书籍方面的准备,到现在为止,对应的JavaSE方面的内容,稍稍地学了一点,也算是能拿来写点东西了,所以今天来写一篇学习总结。

        考虑到之前C语言学习的笔记是按日期记,但自己目前学习的进度并没有那么快,所以考虑以后,决定以后还是按学习进度和时间来进行整理归纳,内容是不会漏掉的,但是更新的频率会有所放缓,同时单次的内容会变多。

        废话不多说,直接进行近期的学习内容总结吧。

        (一)初识Java

                之前一直为了后续的学习,对C语言这一基础的编程语言进行学习,我实际上C语言的课程完整地上了得有两次,也因此对C语言更加熟悉,这次乍一下的浸入到Java的学习中来,还是会稍微有点不适应,好在刚开始的内容不算太难。

                Java语言的泛用性自然是不用说的,在使用的排行上,基本是C,C++和Java三家轮流做老大,而Java和C++都是脱胎于C,所以在不少地方有一些相似。

               此外,Java的口号我觉得很有意思“Write once ,Run anywhere”,意为一次编译,处处运行,即不受平台限制,泛用性极高,能实现这一点的原因在于Java的程序不是跑在对应操作系统的平台上的,而是跑在JVM虚拟机上,而JVM则包含在JRE(java运行环境)内,JRE又包含着在JDK(Java开发工具包)内,所以我们只需要安装了JDK,就相当于装好了JVM,而我们编写好的程序,最后都会在JVM虚拟机上运行。

                Java的注释规则跟C类似的地方也有不同的地方,首先行注释和多行注释(块注释)是一样的,Java相对于C语言多了一个文档注释,这是一个很方便的功能,可以利用文档注释功能,直接生成一个帮助手册,提高了自己代码的可读性。

                Java的标识符明明规则跟C的有一点不一样,Java的类名,要求采用大驼峰的方式去明明,也就是名称中所有单词的首字母大写;而方法名、变量名则是采用小驼峰的命名方式,也就是首个单词全部小写,后续单词全部首字母大写。这一块在《Java开发手册》内也是有相关要求的。至于常量名,则是大家都一样,全部采用大写。最后说一下注意点,Java的标识符明明内相比C语言会多一个允许的符号,C语言允许的是数字、字母、下划线,而Java则多一个允许美元符号。同样不能用数字作为标识符开头。Java关键字的相关内容,则需要根据后续学习内容不断延伸了,关键字肯定是不允许作为标识符的,我相信这一点不管在哪个语言应该都是一样的。

        (二)数据类型与变量

                Java的数据类型与C语言相比,有不少的相同点,当然,也有很多的不同点,这边直接按Java来表述,Java的基本数据类型总共有八个,分别为byte、short、int、long、float、double、char、boolean。相比于C语言,我觉得是更加明确的,并且这些数据类型不区分有无符号,实际全部都是按有符号考虑的。

                因为Java运行在JVM虚拟机上,所以不像C语言,各种数据类型在内存中所占的内存单元可能会因实现而有所不同,Java里,上述八个基本数据类型中,七个类型在内存中所占的字节数是固定的,byte占一个字节,short占两个字节,int占4个字节,long占8个字节,float占4个字节,double占8个字节,char占2个字节,而boolean在IDEA内占1个字节,实际上boolean(布尔类型)在Java规范内是没有规定占几个字节的,所以我们应当将其认为未知。

                细心的人可能发现了,在C语言中,字符类型char占一个字节,为什么Java里面一个字符类型占了2个字节,原因在于Java的采用的字符集不是ASCII字符集,而是unicode字符集,这个字符集号称是收录了全世界所有国家的所有符号,为了能将这些字符符号表示出来,所以需要更大的内存空间,因此在Java里面,一个char类型的变量会占据两个字节。

                byte是相对于short更小的整数数据类型,只占一个字节。

                Java里默认的整数数据类型是int,而默认的浮点类型是double,Java语言对数据类型的检测会比C语言更加的严格,若将int类型的数据直接赋值给short或者long类型,会报错,需要对对应赋值的数据进行强制类型转换或对应进行注明才行,若是通过常量进行赋值,那么编译器会对这个数据的范围进行检测,如果是在对应数据类型可接受的范围内,那么会允许通过,如果超过了对应的数据类型数值范围,那么同样会进行报错。

                关于整型相除的部分,这部分情况跟C语言基本情况一直,比如5/2的结果,最后会是2,因为0.5的部分被舍弃了,而%运算符的时候,情况会有所不同,在C语言中,%运算符要求两边的表达式均为整数,但在Java内,是允许被除数采用小数的,并且余数也可以是小数。

                char类型里也有值得一说的,即使采用了不一样的字符集,但如果unicode字符集和ASCII字符集,对字母和数字的编号是一样的,那实际上对这部分的编程思路,也就不需要调整了,并且Java内char类型也跟C语言一样,可以直接输入整型。

                最后一个boolean类型(布尔类型)则跟C语言有很大的不同了,C语言不管是C99还是ANSI C,本质上都没有一个专门的布尔类型,后面的bool或者_Bool都是采用定义标识符或者类型替换的方式,包装出了一个布尔类型出来,实际上还是按1为真,0为假来计算。但在Java里,是专门有boolean这一基本类型存在的,这个类型的数据只有两种值,一个是true,一个是false,这两个值既不是1也不是0,也不是其他的数值,就是true和false,所以在使用选择和循环等语法时,要注意不能像在C语言一样,直接想用数值来替代真假。所以自然也不能给boolean类型赋值数值。

                数值范围小的数据类型,赋值给数值范围大的数据类型时(如short类型的数据赋值给int类型),会发生自动转换(隐性提升),会将范围小的数据类型自动提升为范围大的类型;而将数据范围大的数据类型赋值给数值范围小的数据类型时,则会发生截断,这一过程在C语言中是自动进行的,但在Java中这是不合法的,需要我们自行将其进行强制类型转换后才能进行赋值;而在数据进行运算时,运算过程中会将数值范围小的数据类型转化为数值范围大的数据类型。

                最后再说一个C语言中不存在的数据类型,在C语言中,我们定义一个字符串时,我们是以一个字符数组或者字符指针实现的,字符串数据通过将一个字符串所有字符一个一个存入数组内,并在末尾加上一个‘\0’来表示这个字符串的结束,或者将某个字符串的首元素地址复制给字符指针,这样来实现,所以C语言本质上是没有一个专门的字符串数据类型的。而在Java里,专门有一个字符串的数据类型,它可以直接存放字符串,同时它也不像C语言一样,自动会在字符串末尾加上一个隐藏的‘\0’。Java里字符串是直接作为一个值能直接跟其他数值进行加法运算的,一个字符串跟一个数值进行加法运算,结果也会是一个字符串。这一点在Java的输出函数会有特别的体验,看下面的代码:

int num = 100;
int b = 5;
System.out.println("123"+num+b);// 结果是1231005
System.out.println(num+b+"123");// 结果是105123

        (三)运算符

                Java的运算符方面跟C语言相比,其实大差不差,算术运算符、关系运算符不能说十分相似,只能说是完全一样,但有一点要注意,就是Java因为本身是有布尔类型的数据类型的,所以当进行关系、逻辑运算时,最后得出的结果也会是一个布尔类型的值,也就是true或者false。逻辑运算符一样差距不大,逻辑是差不多的,但是Java会多一个&运算符,当&的两个操作数都是布尔值时,这是&会被看作是一个&&,但跟&&不同的一点是,&不会发生短路求值的事情,也就是不管左侧的操作数是否已经决定了整个表达式的真假,右侧操作数都会被进行计算。

                位运算符、移位运算符跟C一模一样,但是右移还多了一个运算符叫做无符号右移,正常的右移,移动后会按符号位补充数字,而采用无符号右移,则会无视符号位,直接补0。

        (四)逻辑控制

                Java的if、while、do、for语句,跟C语言一模一样,唯一的区别在于,Java的控制表达式必须是一个布尔表达式。

                Java输出到控制台的方式目前我知道的有三种,都是以下面的方式去实现的:

System.out.print();//括号内输入字符串或其他数据类型
System.out.printf();//括号内的值输入方式跟C语言一模一样
System.out.println();//括号内输入字符串或其他数据类型

                Java输入到控制台,在准备阶段需要做的工作就比较多了,需要用到一个类Scanner,大致过程如下:

import java.util.Scanner;
public class TestInput{
    public static void main(String[] args){
        int num;
        Scanner scan = new Scanner(System.in);
        num = scan.nextInt();//输入num的值
        System.out.println(num);//输出num的值
    }
}

                以上,就是最近学习的全部内容了,其实主要是熟悉新的语言,并且用新的语言,去实现跟原来C一样的事情,从而提高自己的熟练度,上面这几行代码就是我完全自己手动敲出来的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值