0、Java中的this关键字
0.0、在初始面向对象思想之后,我们接触了类与对象,就会不可避免地接触到this关键字
0.1、this关键字指向的是对当前对象的引用。
0.2 、this的作用
0.2.1、this.属性名称
这样写的意义是区分成员变量(类中的非静态变量)与方法中(构造方法,传值方法setValue())传进来的局部变量的重名问题、
我们知道类变量(静态变量)是不依赖于类的,最先加载进来的就是类变量,(静态变量)
之后加载类的时候,类里面的方法,构造方法中的形参。是优先顺序的。
也就是不加this.成员变量名的时候,
如: public void setTestint(int testint) {
testint = testint;
} //他是形参变量自己传给自己,最后成员变量还是没被赋值
执行如下代码:
package bilibili.bobro.operator.test;
public class ThisTest
{
public static void main(String[] args)
{
Test t=new Test();
System.out.println("t.getTestchar():"+t.getTestchar());
System.out.println("t.getTestdou():"+t.getTestdou());
System.out.println("t.getTestint():"+t.getTestint());
System.out.println("t.getTeststr():"+t.getTeststr());
}
}
class Test
{
private int testint;
private boolean testboo;
private String teststr;
private double testdou;
private char testchar;
public int getTestint() {
return testint;
}
public void setTestint(int testint) {
testint = testint;
}
public boolean isTestboo() {
return testboo;
}
public void setTestboo(boolean testboo) {
testboo = testboo;
}
public String getTeststr() {
return teststr;
}
public void setTeststr(String teststr) {
teststr = teststr;
}
public double getTestdou() {
return testdou;
}
public void setTestdou(double testdou) {
testdou = testdou;
}
public char getTestchar() {
return testchar;
}
public void setTestchar(char testchar) {
testchar = testchar;
}
}
控制台输出结果如下:
如果不加上this,那么
setVal(形参)
{
形参(局部变量)=形参(局部变量)
}
把实参传给方法中的形参,然后形参自己给自己赋值,类中的成员变量压根没参与。
传进来的实参碰都没碰到,所以还是空的。
局部变量:方法定义中或者方法声明上。
局部变量:在内存的栈中。
局部变量:随方法的调用而存在,随着方法的调用完毕而消失。
如果不加上this,人家局部变量反手一个自己传自己,传完消失注销释放在内存的栈上的内存。
百花丛中过,片叶不沾身,你的成员变量SET方法什么值也没捞到。
就酱紫~~~~
所以this很重要!~~
1、运算符与、或、异或
&:按位与
|: 按位或
^:按位异或 (关键在于异,一样的都返回0,不一样的再进行或)
0000 1111 11 00
^ 1111 0000 11 00
1111 1111 00 00
1010
& 0110
0010
1100
| 1010
1110
2、修饰符 private、 public 、默认(default/friendly)、protected
private 只有当前class内可用。
默认:default:friend 同类,同包可用 父子孙辈不可用
public:公共类
protected :保护的 自己,朋友,子孙能用?
3、移位操作符" >>" and " << "
以11为例:
11的二进制: 0000 1011 11
11>>1 0000 0101 5
11>>2 0000 0010 2
11<<1 0001 0110 22
11<<2 0010 1100 44
右移相当于是除法,但我们不说是除法,因为 左移右移都是转为二进制然后 左右两边移动补0就行了
在计算机中,位运算的速度是大于 */(乘除)的
3、eclipse中的快捷键:
熟练掌握代码编译器有助于我们更快的提升自己:
eclipse中
快速生成ste和get方法。CTRL+SHIFT+S
快速复制上一行:ctrl+Alt+down/up