稍微有些乱,日后再陆续整理,主要参义方法,与理解代码意思。
面向对象的引入
实质就是一种变成范式(就是一种套路–一类问题的解决方案)
先说面向过程,面向过程就是注重每个动作的代码细节实现;
例如把大象装冰箱 打开冰箱门,把大象装冰箱,再关门;这就是面向过程
面向过程的特点:就是关注代码细节;代码复用性问题
//
面向对象则是,有人做装大象这件事,你只要告诉这个人,这个人就会帮你装
而这个人也是重复上述步骤;
而这种方式就是面向对象,以此类比万物皆对象
面向对象:先把过程的代码实现细节整合到对象中,只要找到这个对象就能
拿到这个对象身上的功能,面向对象基于面向过程;
面向对象是否优于面向过程呢?如果长江比较简单,优先使用面向过程,如果场景
比较复杂就优先使用面向对象;
----------------------–-----–-------
类和对象之间的关系
对一类对象进行抽取,对共有的特征抽取成属性,将共有的行为抽取成
方法,这一类对象就抽取成了类-----而类就是对象的概括;
人 class person{
姓名
性别 String name;
吃饭 char gender
睡觉 int age;
eat();sleep();
将对象抽象成一个类,抽取成一段描述,
public class ibject{public static void main(String[] args){
创建person对象
调用的是构造方法---用于创建对讲
创建对象是由调用构造方法来完成的;
【构造方法–无参构造 public person(){}与类同名,
没有返回值类型(没有void) 两点同时符合时才是构造方法;
如果类中没有手动添加构造方法,jvm会在底层默认添加一个无参构造
如果类中定义了构造方法,jvm就不会添加一个无参构造
构造方法可以重载,可以对对象的属性可以初始化 】
person p = new person();
p.age=10; 给对象的属性 age 赋值10;
方法有就近原则
有参构造: public person(St15:50 2019/7/6ring name){
name = name; 方法中name直接找到name,则输出null;
改为 this.name = name 则会正常赋值;
【在java中所有的非静态属性以及方法都可以通过对象调用】
不加static的属性就是非静态属性
}
}
person类
class person{
属性
String name
char gender
int age
类中写方法不写static,如果想让main方法调用,就加static
方法:public void eta(){name+ 吃 }
public void sleep(){name+睡}
【public static void m(person p){
p.age=10;
如果在main方法中再次调用 m 方法,则方法传入的是一个对象;
对象的地址值找到原堆内存改变了元素,会影响原堆内存。】
}
}
}
}
演示:
class Student{
String name;
int age;
char gender;
public Student(){
System.out.println(“this:”+this);
}
public Student(String){}
public void study(){
【this】就代表当前类的对象;this就可以指代还没有创建的对象;
System.out.println(this.name+“在学习”);
System.out.println(“this:”+this); }
}
创建Student对象
Student s = new Student();
Student s1 = new Student();
System.out.print(“s1”+s1);
this----关键字
用于代表当前类的对象,this可以指代还没有创建的对象,
也可指代刚创建出的对象,也可指代正在使用的对象,是一个灵活的指代,
指代就是正在使用的对象—也是虚拟的指代,因为并没有开辟空间
public Student(String name){
this.name = name;
}
public Student(String name,int age){
如果使用Student(name)则调不到方法
【调用已经有的方法;使用this(name);】
this语句---格式 this(参数)
this语句只能在本类构造方法中调用其他形式的构造方法;
this语句只能在第一行调用
this.age=age
}
演示:
class baby{
属性
String name;
char gender;
int age;
构造方法代表----生产方式;
public baby(){
this.name =“xxx”
this.gender=“xx”
this.age=1;
}
public babay(String name){
this.name =“xxx”
this.gender=“xx”
this.age=1;
}
public baby(String name,int age){
this.name =“xxx”
this.gender=“xx”
this.age=1;
}
方法---行为
public void cry(){
System.out.println("cry");}
}
构造代码块
类内外方法{}---构造代码块
构造代码块格式 { 方法 } 与创建对象有关,构造代码块中的内容
优先所有的构造方法先执行;与位置无关;
也可以对属性进行初始化
只要创建对象无论调用任何形式的构造方法都会先执行构造代码块
{ this.name =“xxx”
this.gender=“xx”
this.age=1; }
局部代码块
也叫做方法代码块,用于控制变量的生命周期;
提高内存利用率;
public static void main(String[] args){
int j =2;
局部代码块:{int i = 1;
System.out.println(i+j);}
可以控制变量的生命周期;
直接创建的对象,称为匿名对象:
new baby().age;
可以给属性进行赋值取值;
匿名对象的使用场景:
只能使用一次,当做参数传递的时候
位置、
局部变量与成员变量的区别
局部变量:方法内或者代码(非静态)里;
成员变量:方法外,类内
2、作用范围
两个位置不一样,作用范围不一样
3、内存位置
成员变量在堆内存
局部变量在栈内存
4、声明周期
局部变量:当方法执行或者执行代码块而创建;方法或者代码块执行完毕
就随之消除;
成员变量:随着对象的创建而产生的,随着对象变为无用对象被回收时,就销毁;