1. 面向对象和面向过程
(1)面向过程 强调过程,执行者:它是一种更符合人们思考习惯的思想;
(2)面向对象 强调对象,指挥者:它使复杂的内容简单化;
(3)面向对象思想的特点:它使我们从执行者变成了指挥;
2. 面向对象的特点
封装;继承;多态
3. 类和对象
(1)类对现实世界中同一类事物的描述(成员变量和方法);
(2)对象现实世界中实际存在具体的个体;
4. 成员变量与局部变量的区别
1.作用域:
成员变量的作用域是整个类中都可以访问;
局部变量是的作用域是定义它的{}内, {}中的语句执行完它就被回收;
2.初始值:
局部变量使用前必须手动赋值, 系统不会赋默认值;成员变量系统会赋默认初始值.
3.所在内存区域:
局部变量在方法运行的栈内存里,在栈里,会自动释放;包括调用对象中的方法的入参,在方法调用时会在栈内存中创建空间当方法调用完毕之后,就会被释放掉。
成员变量在对象里,对象在堆里,成员变量也在堆里,不使用的对象会被垃圾回收机制在不确定的时候回收.
但是你如果指定了构造方法的话编译器就不会在给你指定了,也就是说不可以new Point()要写你指定的那一个
package cn.czbk.no4;
public class Car {
String dest;
int num;
public void run(){
int x=10;
System.out.println(num+"....."+dest);
System.out.println(x);
}
public void show(){
System.out.println(num+dest);
}
public static void main(String[] args) {
Car car =new Car();
car.run();
car.show();
}
}
6. 封装
(1)封装的好处:便于重复使用,安全性高。
(2)private(私有的)权限修饰符。
7. private(私有)
private 修饰成员变量和成员不能在其他类中直接访问.
注意:私有仅仅是封装的一种体现形式, 封装是一种思想, 就是将具体实现隐藏, 仅对外 暴露访问方式.
8. 构造方法
(1)用途:用于给对象中属性进行初始化。
A:格式 类名(){code}Person(){}
B:Person(){}public Person(){}
(2)特点 不定义空参构造,系统会自动给一个空参构造,定义了构造方法无论是有参 还空参的,系统就不再给空参数的了
(3)重载构造方法,是根据参数列表来区分是哪个构造方法。
9. this 关键字
每个对象都有一个指向自己的指针,就 this。
10. this 的作用
1.在方法中区分成员变量和局部变量.this.成员变量;
2.this 语句可以在构造方法里调用其他构造方法;
3.在一个方法中,this 可以调用本类的其他方法,可以省略:
(1)代表当前对象的引用。使用的时候,谁调用方法,this 就代表谁。 (2)什么时候使用 this 呢?
A:当局部变量和成员变量重名的时候,可以用 this 进行区分。
B:this 调用成员方法
C:this 调用本类其他构造, 注意必须放在构造方法第一行。
package cn.czbk.no4;
public class TestThis {
String name;
String sex;
public TestThis(){
//this就是代表一个对象也就是相当于构造方法所以不能TestThis('小王','男')
this("小王", "男");
}
public TestThis(String name,String sex){
this.name=name;
this.sex=sex;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public String getSex(){
return this.sex;
}
public void setSex(String sex){
this.sex=sex;
}
public static void main(String[] args) {
TestThis test=new TestThis();
System.out.println(test.name+test.sex);
}
}
11. 创建对象在内存中的详细步骤: Person p = new Person();
1.主方法进栈,给类类型变量 p 分配空间
2.在堆内存中开辟空间,分配内存地址
3.在堆内存中建立对象特有属性,并进行默认初始化
4.对属性进行显式初始化
5.将内存地址赋给栈内存中的 p 变量
12. static(静态)特点
随着类的加载而加载,随着类的消失而消失。优先于对象。静态可以被所有对象共享, 也可以被类名所调用。
package cn.czbk.no4;
public class TestStatic {
static int a;
static String s="在类加载时即可调用";
public static void show(){
System.out.println("不用创建对象即可以直接调用");
}
public static void main(String[] args) {
TestStatic test=new TestStatic();
test.show();
System.out.println(test.s+test.a);
}
}
package cn.czbk.no4;
public class StaticDemo {
public static void main(String[] args) {
Person p=new Person();
p.sayHi(Person.b);
}
}
class Person{
String a;
public static String b="123";
void sayHi(String s){
System.out.println(s);
}
}
13. 方法区
方法区是各个线程所共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变 量,即时编译器编译后的代码等数据.
局部代码块&构造代码块&静态代码块:
局部代码块:
作用:控制变量的生命周期 构造代码块:
作用:它可以给所有对象进行初始化,存在于类中。当类中的构造方法以重载的形式 存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化;这样 可以减少代码的重复。
静态代码块:
作用:加载驱动器。当类中的方法都被静态化,并且构造方法被 private 了,这时我 们不能,在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块。
package cn.czbk.no4;
public class TestSequence {
public TestSequence(){
System.out.println("调用构造方法");
}
TestSequence(String s){
System.out.println("调用构造方法"+s);
}
static{
int a=9999;
System.out.println("静态代码区"+(a+1));
}
{
System.out.println("构造代码区");
}
public static void main(String[] args) {
TestSequence t=new TestSequence();
TestSequence s=new TestSequence("abc");
}
}
14. 静态的使用
类的成员用 static 修饰后,就多了一种调用方式,原来对象名.成员可以继续调用,现 在,通过类名.成员,也可以调用.
类在什么时候加载?
在第一次使用的时候加载,而后就常驻内存.
16. final 关键字
final 可以修饰类,方法,变量。final 修饰的类不可以被继承。final 修饰的方法不可以 被覆盖。final 修饰的变量是一个常量, 只能被赋值一次。
17. final 和 private 区别
final 修饰的类可以访问。 private 不可以修饰外部类,但可以修饰内部类,讲内部类的时候会演示 final 和 private 修饰的方法子类无法重写, final 不允许重写, private 重写不了. final 修饰的变量只能在显示初始化或者构造方法初始化的时候赋值一次,以后不能更改。 private 修饰的变量,也不允许直接被子类或一个包中的其它类访问或修改,但是他可以
通过 set 和 get 方法对其改值和取值。