面向对象的引入—对象和类之间的关系、构造方法、this关键字、构造代码块、局部代码块、成员变量与局部变量的区别

面向对象的引入

面向对象本质是一种编程范式(一种思考方式)
面向过程:关注的是代码的实现细节
面向对象:先把代码实现的细节整合到对象中,找到这个对象就能拥有对象的功能
万物皆对象
面向对象基于面向过程,面向对象优于面向过程?如果场景比较简单优先推荐面向过程,如果场景很复杂优先推荐面向对象

对象和类之间的关系
对一类对象来进行抽取,把共有的特征信息抽取成了属性,把共有的行为信息抽取成了方法,把这一类对象抽取成了类。类是对对象的概括,对象是对类的具体实现。
构造方法
a.构建对象
b.1.与类同名 2.没有返回值类型
c.有参构造用于属性初始化,支持构造方法重载
d.当类中没有定义任何形式的构造方法,JVM会在底层默认添加无参构造,如果累中已经定义构造方法,那么底层就不会再添加无参构造
e.类中至少含有一个构造方法

public Person (String name){ // 方法有就近原则
// this代表当前类的对象
this.name=name;
}

java中所有的非静态属性和方法要由对象调用

this
a.关键字,代表当前类的对象
b.可以代表当前类还没有产生的对象,代表当前类刚创建的对象,代表当前类正在使用的对象。this是一个灵活的指代(虚拟),可以指代当前类正在活动的对象
c.this语句----在同一个类中的构造方法里调用别的构造方法,要在首行使用

package cn.tedu.object;
public class ThisDemo{
public static void main(String[]args){
//创建对象
Student s1=new Student();
//this可以代表当前类刚创建对象
System.out.println("s1:"+s1);
//创建对象
Student s2=new Student("tom");
//this是一个灵活的指代
System.out.println("s2:"+s2);
//this指代成当前类正在使用的对象
s1.study();
	}
} 
 
//代表学生的类
class Student{
//属性
String name;
int age;
char gender;
 
//无参构造
public Student(){
System.out.println("this:"+this);
}
  
//有参构造
public Student(int age){
this();
}
 
public Student(String name){
//调用别的构造方法
//Student();调用不到
//this语句---调用别的构造方法要在首行
this(1);
this.name=name;
System.out.println("this:"+this);
}
 
//方法
public void study(){
//this可以代表当前类好没有创建对象
System.out.println(this.name+"在学习...");
//
System.out.println("this:"+this);
}
 
}

构造代码块
a.在方法外类内{}
b.属性初始化
c.优先于所有的构造方法先执行

package cn.tedu.object;
 
public class ObjectDemo2{
public static void main(String[]args){
//
Baby b=new Baby();
//
System.out.println(b.name+","+b.age);
}
 
}
 
 
//代表婴儿的类--创建对象就是真实的婴儿
//要求:不管怎么出生,婴儿的名字都叫莉莉,年龄是1岁
class Baby{
//属性
String name;
int age;
char gender;
 
//构造代码块
//优先于所有的构造方法先执行
//属性初始化
{
this.name="莉莉";
this.age=1;
}
 
//无参构造---婴儿没有名字没有年龄
public Baby(){
/*this.name="莉莉";
this.age=1;*/
}
 
//有参构造---婴儿出生时有名字
public Baby(String name){
//this.name=name;
/*this.name="莉莉";
this.age=1;*/
}
 
//婴儿出生时有名字也有年龄
public Baby(String name,int age){
/*this.name=name;
this.age=age;*/
/*this.name="莉莉";
this.age=1;*/
}
 
//方法
public void cry(){
System.out.println(name+"在嗷嗷的哭...");
}
}

局部代码块
a.在方法内{}
b.控制变量的生命周期,提高内存的利用率

package cn.tedu.object;
 
public class ObjectDemo3{
public static void main(String[]args){
int x=1;
//局部(方法)代码块,控制变量的生命周期
{
int y=2;
System.out.println(x+y);
}
//1000行代码没有使用上面定义变量
}
}

成员变量与局部变量的区别
1.位置
成员变量:方法外类内
局部变量:方法内
2.作用域
成员变量:整个类
局部变量:整个方法内
3.内存
成员变量:堆
局部变量:栈
4.生命周期
成员变量:随着类创建对象而出现,随着对象被回收而消失
局部变量:当方法被调用时才出现,随着方法执行结束而消失

你可能感兴趣的:(java,java,类)