一些基本的流程控制语句就不写了。。直接从对象开始刚!
首先:类和对象!
如何描述类,类具有一定的属性和行为。行为==方法 (比如人会跑,跑就是方法) | 属性 = 描述人的内容(身高,体重等)!
这个时候有了类之后,就要想如何产生实体了,有了人类还不够,还必须要有 个人 ,人就是人类的具体个体。而且每个实体的行为和属性都不定。
函数在内存中的运行:我们用一个main方法调用add方法来举例子!首先main 函数进内存,进了内存之后再加载了一个名字叫sum的属性。
这个时候add方法再进内存,加载了两个形式参数属性,计算从调用者方传来的两个参数的值,然后把结果return(返回)给调用者。当这个值返回完成时,
add方法就会弹出内存,用于运算的内存叫做栈!进内存叫压栈(进栈),出内存叫弹栈。这个时候add弹栈(出栈),这就叫内存释放。
变量的自动类型提升:比如byte b ; int a ;int c = a+b ,这个时候类型不一致,遵从小的向大的类型提升的规则,byte类型将从1个字节提升为4个字节转换为int类型再 计算。
但是重点来了!假如我写了下面一段程序。
class a{
byte a =1;
a=a+1;
sysotem.out.println(a);
}
这个程序看似没错!但是真的能自动转换吗?事实上执行时候是会报错的,那么这是为是什么呢?
其实原因是因为a是变量,总所周知byte的取值范围是 --128到+127之间。这个时候假如a在接下来的赋值当中有可能会大于127或者小于-128那么久会造成精度丢失!
所以身为变量的a并不能遵从自动类型提升的规则。那么假如byte类型的值大于127或者小于-128,都会报错!
逻辑运算符:
&&(短路与) ||(短路或)
& 和 &&的区别 a=1 a>5(假) &a<8(真 )两边都要参与运算!当两边都运算完之后返回假!! 但是当你用 a>5(假) && a<8(不运算! )当遇到假的时候直接不用运算后面的数据,效率较高。
所以一般情况下用&&,除非右边的数值涉及到必须要运算。
那么 | 和 || 也是一样的,| 两边都参与运算 ,||的话如果遇到一个true 就不向下再做运算,结果返回true。
位运算符<< >>
3<<1 3左移一位,假如把3转换成byte的二进制的每个位都转换成数组中的元素,那么 指的是3被转换成byte之后的二进制的状态下整个数组向左移动1位,也就是说a[0]被删除了,而丢失的位则被0补齐。开始状态下的3的二进制:00000000 00000000 00000000 00000011 改变后:00000000 00000000 00000000 00000110 结果为6
那么>>右移也是一样的 3>>1开始 :00000000 00000000 00000000 00000011 改变后:00000000 00000000 00000000 00000001。结果就变为1了。
可以这样说,3<<1指的是3*2(n):3乘以2的n次幂。 >>右移的话原符号位的第一位是什么就补什么。
那么位运算的优势是:运算速度快 ! 缺点:只能操作2的倍数。 如果在开发中只对2的倍数进行操作。可以用位运算!顺便提一句:2进制最高位0表示正,1表示负。
还有》》》无符号右移 为了一个数取得二进制下的位的其他进制的值。可以运用。二进制中的一段二进制位的无符号移动,比如右移3位,变8进制,4位16进制。
今天先写这么多,兄弟,以后再见!