20145326《Java程序设计》第二周学习总结

教材学习内容总结

本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型、变量、运算符、流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础。虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性。

1. 类型

在java的世界中,并非每个东西都抽象化为对象,你还是要面对系统的一些特性。例如你还是要意会到内存长度有限的问题,所以程序执行时遇到123这个整数时,还是要想一下,用多少长度的内存来储存它比较经济。基本上,java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型。

基本类型(每种类型都有其储存范围,如超出范围,即Overflow):

所谓基本类型,就是在使用时,得考虑一下数据用多少内存长度来存比较经济,利用程序语法告诉JVM,然后由JVM自动为你在内存中配置与管理。在java中的基本类型主要可以区分为整数、字节、浮点数、字符与布尔。

  1. 整数:可分为short整数(占2字节),int整数(占4字节),long整数(占8字节)三种,不同长度的整数,可储存的整数范围也不同。long整数占的内存长度比int整数来得多,可表示的整数范围也就比int大。例如,int类型的十进制2其实是以000000000 00000000 00000000 00000000 00000010形式存储在内存中。所占字节越多的整数类型可表示的整数范围越大。
  2. 字节:byte类型顾名思义,长度就是一字节,在需要逐字节处理数据时(如图像处理、编码处理等)就会使用byte类型,byte也可以用来表示整数,可表示的整数范围是-128~127。
  3. 浮点数:主要用来储存小数数值,可分为float浮点数(占4字节),double浮点数(占8字节)。double浮点数使用的内存空间比float浮点数来得多,可表示的精确度也比较大。
  4. 字符:char类型用来储存‘A’、‘B’、‘林’等字符符号。每个字符类型占2字节,汉字字符与英文字符在java中同样都是双字节储存。
  5. 布尔:boolean类型可表示true和false,分别代表逻辑的“真”与“假”。在java中不用在意boolean类型的长度,因为你也无法将boolean类型与其他类型做运算。
  6. 备注:每种类型占有的内存长度不同,可储存的数值范围也就不同。例如,int类型的内存空间是四字节,所以可储存的整数范围为-2147483648~2147483647,如果储存值超过了类型范围称为溢值,会造成程序不可预期的后果,而且我们不用记忆各种类型可储存的数值范围,可以通过API来实现。System.out.printf()是标准API,意思是对输出文字做格式化后再显示在文本模式中,一些常用的格式控制符号要熟记!(书上有表格列出) 类类型:详见第四章

2. 变量

程序语言中的暂存位置我们称之为变量,可以声明变量,也就是告诉JVM,我想要某个位置,这个位置叫做XXX名称,可以放什么类型的数据。 1. 使用前要声明变量类型,即使用上文所提到过的short,byte,char等关键词来声明 2. 变量在命名时有一些规则,它不可以使用数字作为开头,不可使用特殊字符,而且变量名称不可以与java的关键词同名,常用“驼峰式”命名法,如“int ageOfStudent”。目前为止,我们的程序范例都是撰写在main()中,在方法中声明的变量称为局部变量。 3. 不可以声明局部变量后未指定任何值给它之前就使用变量。在调用变量之前,要对变量初始化,即给变量赋值。ps:如果,在变量赋值后,不打算改变可以加上final,例如final double PI=3.1415926;来防止自己或他人不经意修改。 4. tips:在表示数字常量时,0b表示二进制数,0x表示十六进制数,如int a=0xC,在表示较长的数字时,使用下划线可以使表达更加清楚。如int b=0b1010 _1010 _1010。

3. 运算符

  1. 算数运算符+、-、*、/。也就是加、减、乘、除。%成为模运算符或余除运算符。算数运算符使用上与学过的加减乘除一样,也是先乘除后加减。(详情看书上例子)运算符两边各留一个空格,这样比较容易阅读。
  2. 数学上还有大于、等于、小于的比较运算,java中也提供了这些运算,这些运算符称为比较运算符,它们有大于(>)、小于(<)、等于(==)、不小于(>=)、不大于(<=)以及不等于(!=)等条件运算符。记住“等于”是两个等号!一个=是指定运算。java有个条件运算符,(Conditional Operator):条件式?成立返回值:失败返回值。如System.out.println("是否及格?%d%n", score>=60?'yes':'no');
  3. 在逻辑运算符中,有“且”“或”“反相”这几种逻辑。分别用&&(与)、||(或)、!(非)来表示。&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;同样的,||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。这在一定的程度上还是能提高代码的编译执行效率。
  4. 位运算符:在数字设计上有AND、OR、NOT、XOR与补码运算,在java中提供对应的位运算符,分别是&(AND)、|(OR)、^(XOR)、~(补码)。如果不会基本位运算,可以从书上的例子找找感觉。位运算是逐位运算。补码运算是将所有位0变1,1变0。java在位运算中还有(>>)左移与(<<)右移两个运算符。左移运算符会将所有位往左移指定数位,左边被挤出去的位会被丢弃,而右边补上0;右移运算符则相反,会将所有位往右移指定位数,右边被挤出去的位会被丢弃,至于最左边补上原来的位,如果左边原来就是0就补0,是1就补1.还有个>>>运算符,这个运算符在右移后,最左边一定是补0.
  5. 递增递减运算我也觉得没什么难度,和c语言里的知识很类似。关键是要区分i++,++i,如果将++运算写在变量前,表示先将变量值加1,然后再返回变量值;将++写在变量后,表示先返回变量值,然后再对变量加1.(书上有例子)
  6. 指定运算的话,参考书上的表格就行了,没什么难度。

4. 类型转换

  1. 在实际操作中无论是刻意修改还是无心之失,都会出现将变量类型混淆的情况。例如,在默认情况下,整数均为int型,浮点数为double型。像在如下例子中 float PI = 3.14,3.14默认为double型,不能把double型的小数赋给float型,这样就会丢失精度,编译时就会报错。但如果非要用float来储存的话,可以在3.14后面加个F,或者float PI=(float)3.14。在程序中写下一个整数时,默认是不超过int类型长度。如果超过了,你就要告诉编译程序,用long来配置整数的长度,也就是在数字后加上个L.
  2. 运算时,类型不相同,则运算时会以最长的类型为主(自动提升)。当然如果操作中都是不大于int的整数,则全部自动提升为int类型进行运算。
  3. System.out.println(10/3);显示的是3,不是3.3333。因为10与3都是在int类型下的计算,若要表示3.333,则必须是System.out.println(10.0/3)。

5. 流程控制

  1. if……else我觉得很简单,直接类比c语言学的知识。
  2. switch:使用效果类似多个if……else语句连用,但是更为简洁,通过不同的switch值进入case语句。
  3. for:写成for( ……; ……; ……),第一个分号前内容多为变量初始化。第一个分号后为判断,结果为true执行第二个分号后的语句并进入循环,结果为false则结束循环。块与块之间用分号隔开,块的内部用逗号隔开。
  4. while do 与 do while:while(条件式){描述句},先判断条件式是否成立,如果成立,则执行描述句。也可以while(true)直接进入循环,在循环内通过if语句判断,达成某种情况依靠break;结束循环。do while与其的区别是先产生一个number(以书上例子为例),再判断要不要执行循环。而while do是直接一来就进入循环。
  5. break、continue:break为直接结束循环,continue为结束当前循环,跳过之后的描述语句,然后返回开头进行下一轮循环。break、continue还可以配合标签使用(书上有例子),具体过程将在程序实践中展示。

教材学习中的问题和解决过程

课后选择题:DADDABADAD

课后程序题1

运行结果: 1000和495的最大公因子是: 5 1000和495的最小公倍数是: 99000

其实感觉难度不大,因为上学期学过密码学数学基础这门课,刚好这里用到了辗转相除法的概念,在此通过while语句来实现循环,最后当余数为0时结束循环。

课后程序题2

运行结果: 153 370 371 407

我首先想到的是用for循环,通过穷举来找出100~1000中的阿姆斯特朗数,值得注意的是要用%将个位上的数分离出来,且a、b、c都是int型。其他没什么难的地方。

代码调试中的问题和解决过程

如果是continue back1,没有任何输出结果。但如果是continue back2,输出“hello world”九次。这里虽然没有展示break的情况,但是break与continue结合标签使用时,back标签都要在for之前!

其他(感悟、思考等,可选)

1.java中的基础语法和c语言中的基础语法其实并没有太大区别,所以可以类比来学习,这样会事半功倍。 2.除了掌握一些基础的知识,主要还是要多敲代码,细节决定成败,不断实践,不断发现错误,不断解决问题,这样自身能力才能提高~!

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3500行 25篇 300小时  
第一周 120/120 1/1 14/14  
第二周 340/460 1/2 14/28  
第三周        
第四周        

参考资料

20145326《Java程序设计》第二周学习总结的更多相关文章

  1. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  2. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  3. 2017面向对象程序设计(Java)第二周学习总结

    2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结

    丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  5. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结

    这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...

  9. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  10. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

随机推荐

  1. CRUX下实现进程隐藏(2)

    前面我们介绍了如何修改/proc目录读取函数的方法实现进程隐藏.这篇博文将介绍另一种方法—— 劫持系统调用实现进程隐藏. 其基本原理是:加载一个内核模块(LKM),通过劫持系统调用sys_getden ...

  2. 170505、MySQL的or/in/union与索引优化

    假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...

  3. yii2中的别名路径,@webroot , @web

    定义在yii\web\Application 的bootstrap中, Yii::setAlias('@webroot', dirname($request->getScriptFile())) ...

  4. 用到了yii2 hasMany() 方法,一对多关联

    view页面代码:其中supply,item,price是一个AR类都是一个类,item和prices是一对多关系: [ 'label' => '参考', 'format' => 'htm ...

  5. CRM - 权限

    一.引入权限组件 引入权限组件 rbac settings: 'rbac.apps.RbacConfig', 中间件: 'rbac.service.rbac.ValidPermission', 员工表 ...

  6. python基础之递归、二分法

    一 递归 1. 必须有一个明确的结束条件2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结 ...

  7. UML Diagrams Using Graphviz Dot

    Introduction Background This article is about using the dot tool from the Graphviz package to automa ...

  8. sql server 碎片整理——DBCC SHOWCONTIG

    转自: 1.http://blog.sina.com.cn/s/blog_6d2675450101ks6i.html 2.http://www.cnblogs.com/CareySon/archive ...

  9. MySQL 的mysqldump备份

    MySQL 的mysqldump备份 来自<mysql技术内幕 innodb存储引擎> --single-transaction:只对innodb表有效 --lock-tables:对My ...

  10. windos 查看指定端口,将指定进程杀死

    >netstat -aon | findstr “80″ Proto   Local Address           Foreign Address         State        ...