## 新认识的运算符
移位运算符 >>右移(除以2的次方) <<左移(乘以2的次方)例:a<<1 意味a乘以2的一次方
2.内嵌的循环,由大循环到小循环,直到跳出小循环才继续执行大循环;循环次数确定使用for循环
若是不确定则用while循环或者do while循环。
## 对象和类
Java中,引入对象和类的概念
-对象是一个变量(一个具体的东西);
-类就是类型(是规范,是定义),从万千对象中抽取共性;
-类规定了对象应该有的属性内容和方法;
-对象是类的具体实现,是活生生的;
-例子:土豆丝菜谱是类,一盘土豆丝是对象。
A obj1 = new A();A obj2 = new A();
·以上有两个对象,他们的类型都是A,但是这两个是不同的对象,在内存中有不同的存放地址。因此,没有两个对象是完全一样的。
·从程序发展的角度来理解。OO(Oriented Object)是对OP(Oriented Procedure)的一种改进。
·OP的典型代表是C和Pascal。更强调方法动作,所有的变量是被动参与进来的,没有自主决定权。
·OO的方法属于每个对象的。能否实现是由每个对象说了算,有主人翁精神。
另外:
public static void 方法名(){}//定义公开的静态方法
public static string 变量名;//定义公开的静态变量
public static class 类名 //stacie:静态
类的继承:子类可以继承父类的所有内容(不能直接访问private成员)
-基本类型无法做到
-结构体只能做到全包含不能控制包含粒度
-子类对象可以通过父类的公有方法间接访问到私有属性或者私有方法;
·对象的赋值是reference赋值,而基本类型是直接拷贝。
(基本类型的变量值小,可以直接拷贝;对象包含多个值,不容易复制,赋值采用共享同一块内存区域)
代码(1)MyNumber.java
```java
class Mynumber
{
int num = 5;
}
```
代码(2)ReferenceTest.java
```java
public class ReferenceTest{
public static void main(String[] args){
int unm1 = 5;
int num2 = num1;
System.out.println("num1:" + num1 + ",num2:" + num2);
num2 = 10;
System.out.println("num1:" + num1 + ",num2:" + num2);
MyNumber obj1 = new MyNumber();
MyNumber obj2 = new MyNumber();
System.out.println(obj1.num);
System.out.println(obj2.num);
System.out.println("=================");
obj2 = obj1;
obj2.num = 10;
System.out.println(obj1.num);
System.out.println(obj2.num);
}
}
```
obj 1,obj 2内存里面存了一个5,输出的结果就是5,5;在后面的obj 2 = obj 1中,obj 2指向了obj 1中的5,然后obj 2中的num等于10,所以obj 1里面的num也等于10;
·类的成员变量都是默认有值的;函数内的局部变量,编译器不会给默认值,需要初始化后才能使用;类的成员变量,编译器会给默认值,可以直接使用。
## 构造函数
·在对象产生时就给成员变量赋值:构造函数
例:
```java
public class A{//就是这厮
int id;
public A(int id2){
id = id2;
}
}
```
·A obj = new A(10);
`Java构造函数的名称必须和类名一样,且没有返回值
·Java有构造函数,但是没有析构函数
—构造函数时制造对象的过程,析构函数是清除对象的过程
(构造函数是在内存中开辟一个空见存储数据;析构函数是将一个数据对象清空)
·每个变量都是有生命周期的,它只能存储在离它最近的一对{}中
-当变量被创建时,变量将占据内存;当变量消亡时,系统将回收内存
·每个Java类都必须有构造函数
·如果没有显示定义构造函数,Java编译器自动为该类产生一个空的无形参构造函数。如果已经有了显示的有参构造函数。编译器就不会越俎代庖
·每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话就是super(),而且super()语句必须放在第一条。
·一个类可以有多个构造函数,只要形参列表不相同即可
·在new对象的时候,根据实参的不同,自动挑选相应的构造函数。如果实参形参匹配不上,将会自动报错
例:
```java
class MypairNumber{
int m;
int n;
public MypairNumber(){
m=0;
n=0;
}
public MypairNumber(int a){
m = a;
n = 0;
}
public MypairNumber(int a,int b){
m = a;
n = b;
}//构造的函数可以同样的类名,但是形参需要不同
}
public class ConstructorTest {
public static void main(String[] args) {
MypairNumber obj1 = new MypairNumber();
MypairNumber obj2 = new MypairNumber(5);
/*若是实参和上面的形参匹配不上就会报错*/
MypairNumber obj3 = new MypairNumber(5,10);
System.out.println(obj1.m + " " + obj1.n);
System.out.println(obj2.m + " " + obj2.n);
System.out.println(obj3.m + " " + obj3.n);
}
}
```
## 信息隐藏和this
### 信息隐藏原则
·面向对象的法则:
—类的成员属性,是私有的private;
—类的方法是public的,通过方法需改成员属性的值
通过类的方法来间接访问类的属性,而不是直接访问类的属性
### this
·this负责指向成员变量
例:
```Java
public class InforHiding{
private int id;
public InforHiding(int id){
this.id = id;
}
public int getId(){
retrun id;
}
public void setId(int id){
this.id = id;
}
}
```
this相当于InforHiding,在构造函数中,形参的优先级更高,所以后面的id指的就是形参id
·同时this也可以指向本类中成员方法
```java
this.add(3,5);//若是调用的是本类中的add方法,this可以忽略
```
·this可以替代本类的构造函数
```java
this(5);//调用本类中一个形参的构造函数
```