Java学习笔记二

我是博客新手,想一直坚持写下去(成为博客专家),
在这里给自己设定一个月的目标:
写出15篇用心的博客。

写博客的目的有三点:
1. 整理记录自己学到的新的知识,以便以后遗忘查看。
2. 和广大编程人员学习交流。
3. 分享一些解决问题的方法。

今天整理的内容:
1.嵌套循环中的break和continue使用
2.浮点数float在内存中的表示
3.面向对象和面向过程
4.== 和 equals()的比较
5.常用操作类。

java嵌套循环中的break和continue使用:java中break和continue可以跳出指定循环,break和continue之后不加任何循环名则默认跳出其所在的循环,在其后加指定循环名,则可以跳出该指定循环(指定循环一般为循环嵌套的外循环)。 指定循环就是在 for 或 while倩加上变量名称 如: loop:for(…) 或 std:while(…) 跳出指定循环在为 break loop; 或 break std;

解释:

示例代码: 
loop:for(int i = 0; i < 3; i++){  //外层循环 循环名为loop
            System.out.println("i:"+i);
            for(int j = 0; j < 5; j++){   //内层循环
                System.out.println("j:"+j);
                if(j == 2){
                    continue loop;   //提前结束指定循环 loop(外层循环)
                }
            }
        }

输出结果为:
i:0
j:0
j:1
j:2
i:1
j:0
j:1
j:2
i:2
j:0
j:1
j:2

loop:for(int i = 0; i < 3; i++){  //外层循环 循环名为loop
            System.out.println("i:"+i);
            for(int j = 0; j < 5; j++){   //内层循环
                System.out.println("j:"+j);
                if(j == 2){
                    continue;   //提前当前最近循环(内层循环)
                }
            }
        }
输出结果为:
i:0
j:0
j:1
j:2
j:3
j:4
i:1
j:0
j:1
j:2
j:3
j:4
i:2
j:0
j:1
j:2
j:3
j:4

可以看到给循环for加上名称(loop)后,当用到continue时就可以指定提前结束哪一个循环。对于break的使用同continue。代码在这里就不贴出了,可以自行检验。

浮点数float在内存中表示:Float在内存中占四个字节共32位,内存中的二进制转变 为Float的公式 是 s * m *2的(e-150)次幂。
int s = ((bits >> 31) == 0)? 1 : -1;
int e = ((bits >> 23) & 0xff);
int m = (e == 0)? (bits & 0x7fffff) << 1 : (bits & 07fffff)|0x800000
规定:二进制的 0 11111111 0000 0000 0000 0000(下文用①表示) 代表float的无穷大,二进制的 1 11111111 1000 0000 0000 0000 (下文用②表示)代表float的无穷小。超过无穷大或低于无穷小则表 示NaN (无效值)
Float的正最大值是:0 11111110 1111 1111 1111 1111(下文用③表示)
Float的正最小值是:0 00000000 0000 0000 0000 0001(下文用④表示)
Float的负最大值是:1 00000000 0000 0000 0000 0001(下文用⑤表示)
Float的负最小值是:1 11111110 1111 1111 1111 1111(下文用⑥表示)
所以float的取值范围是⑥——-③

解释:
因为①是无穷大,所以比①小一点就是最大值即③=3.4*E38,同理最小值就是比②大一点的⑥= -3.4*E38;这里都是根据上面的公式算出的,如果对上面的公式不是很明白的话请看我的上篇博客[Java学习笔记一]中的移位讲解。
(http://blog.csdn.net/look_Future/article/details/79186518)
接下来我们通过一个实例讲解一下上面的公式—将0x0f000001转换为float型。

0x0f000001 的二进制是 0000 1111 0000 0000 0000 0000 0000 0001=bits
    根据 int s = ((bits >> 31) == 0)? 1 : -1;//将bits右移31位
    s = 1
    根据 int e = ((bits >> 23) & 0xff);//将bits右移23位 并与上 0xff(0000 0000 0000 0000 0000 0000 1111 1111 )
    e = 0000 0000 0000 0000 0000 0000 0001 1110 = 30
    根据 int m = (e == 0)? (bits & 0x7fffff) << 1 : (bits & 0x7fffff)|0x800000 //因为这里e等于30所以执行 (bits & 07fffff)|0x800000
    m = 0000 0000 1000 0000 0000 0000 0000 0001 = 8388609
    根据公式 s * m *2的(e-150)次幂 所以 0x0f000001转换为float等于 1*8388609*2等(30-105)次幂 = 6.310888E-30

面向对象: 根据事物属性、行为创建类,然后实现类之间的互相操作。为了加深理解我们这里用设计图(类)、说明书(API)、实例(对象)。根据设计图实现具体的实例,根据说明书使用实例。例如 汽车设计图、汽车使用说明书、汽车。我们根据汽车设计图创建汽车、用户根据汽车说明书使用汽车。
面向过程:将事件分步骤进行,根据步骤写成方法,然后实现方法的顺序调用。为了加深理解我们这里用从冰箱中拿饮料的例子讲解,从冰箱中拿出饮料我们可以分三个步骤来完成 1、打开冰箱 2、拿出饮料 3、关上冰箱。然后我们根据步骤写出下相应的三个方法 openBX(), takeYL(), closeBX(),然后开始顺序调用这三个方法。这就是面向过程编程。

解释:
在这里区分面向过程和面向对象的是有没有把属性和行为归属(封装)到一起形成某个事物(类)。在汽车的例子中我们先从汽车的角度分析汽车所拥有的属性(发动机、刹车、油门等)和行为(跑、刹车、加速等)然后将属性和行为归属到汽车这个事物上;二在从冰箱中拿饮料这个例子中我们是从完成事件的角度分析的,不管事物有谁,我们就按照指定步骤执行。在这里我们用一个简单的流程图来表示
面向对象: 需要完成的事件——分析事件中涉及的事物——分析事物的属性和行为——事物之间的互相操作完成事件。
面向过程:需要完成的事件——分析完成事件所需要的步骤——-事件的有序调用完成事件。

== 和 equals() 的比较: == 比较变量所指向的内容是否相等;equals()比较对象中的内容是否相等。

解释:
在讲解 == 之前我们先了解一下 基本数据类型和引用数据类型
一、从概念方面来说
基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值。
二、从内存构建方面来说
基本数据类型:变量在声明之后java就会立刻分配给他内存空间
引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。

        int i = 300;
        int j = 300;
        System.out.println(i == j);//输出 true
        Integer x = new Integer(2);
        Integer y = new Integer(2);
        System.out.println(x == y);//输出 false

在这里 i 和 j 是基本数据类型,i 在内存中存储的是值即300,所以 i 指向的内容是300;同理 j 指向的是300。而 x 和 y 是引用数据类型,x 在内存中存储的是 2 这个值对象的地址值,所以 x 指向的内容是值为2的地址值,同理 y 指向的是另一个值为2的地址值。 所以 x 不等于 y 所指向的内容。

        注意:::::::::
        ReflectPoint rp1 = new ReflectPoint(2,2);
        ReflectDemo rd1 = new ReflectDemo(2, 2);
        System.out.println(rp1 == rd1);//如果 ReflectPoint类和ReflectDemo类有继承关系则可以用 == 比较, 如果没有就不能用 == 比较。
        int x = 1;
        float y = 2;
        System.out.println(z == y);//对于不同的基本数据类型可以用 == 进行比较

equals()因为是方法,所以只能用在引用数据类型的比较。

数组的操作类 Arrays、集合的操作类Collections、算数操作类Math,这些操作类提供了很多对指定类型操作的方法,可自行查阅Java api 查看相关方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值