目录
1.构造方法
构建对象 形式:1.没有方法返回值类型、2.方法名与类同名
构造方法支持重载 如果类中没有定义构造方法会默认提供无参构造,如果类中定义构造方法就不会默认提供无参构造
一个类中至少含有一个构造方法
java中所有的非静态方法和属性只能通过对象调用
package cn.tedu.object;
public class ObjectDemo {
public static void main(String[] args) {
//创建Person类的对象
//调用构造方法来创建对象---构造方法是来构建对象
Person p=new Person("tom");//对象p
//.代表“的”的意思
//操作的是对象p的属性
//p.name="丽丽";
p.age=12;
p.gender='女';
//调用方法
p.eat();
//对象地址值---cn.tedu.object.Person@28d93b30
System.out.println(p);
}
}
//定义Person类---代表人
class Person{
//特征信息---属性(变量)
//不加static修饰的属性就是非静态属性
//成员变量
String name;
char gender;
int age;
//如果类中没有定义构造方法JVM会默认在底层提供一个无参构造
//如果类中有定义构造方法JVM不会默认在底层提供一个无参构造
//构造方法:1.没有返回值类型 2.方法名与类同名
//构造方法支持重载
//public Person(){}//无参构造
//与类同名的普通方法
//public static void Person(){}
//有参构造(构建对象,初始化属性)
public Person(String name){//方法的就近原则
//this代表当前类的对象
this.name=name;
}
//行为---方法
public void eat(){
int i=1;//局部变量
System.out.println(name+"在吃饭。。。");
}
public void sleep(){
System.out.println(name+"在睡觉。。。");
}
}
构造方法特点:1.构造方法的方法名必须与类名相同。
2.构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
3.构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
4.构造方法不能由编程人员调用,而要系统调用。
4.一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
5.构造方法可以重载,以参数的个数,类型,或排列顺序区分。
2.this
a.关键字,代表当前类的对象
b.this可以代表还没有创建对象、可以代表刚创建对象、可以代表正在使用的对象,this是一个虚拟的对象通过指定对象地址值来代表对象,代表的就是当前类正在活动的对象。
public class ObjectDemo2 {
public static void main(String[] args) {
//创建Student对象
Student s1=new Student();
//this代表刚创建的对象
System.out.println("s1:"+s1);
//创建Student对象
Student s2=new Student("tom");
//this代表正在使用的对象
System.out.println("s2:"+s2);
//this代表正在活动的对象
}
}
//代表学生的类
class Student{
//非静态属性
String name;
int age;
char gender;
//无参构造
public Student(){
System.out.println("this1:"+this);
}
//有参构造
public Student(String name){
this.name=name;
System.out.println("this2:"+this);
}
//行为
public void study(){
//this可以代表当前类还没有产生的对象
System.out.println(this.name+"在学习。。。");
System.out.println("this:"+this);
}
}
c.this语句,在构造方法中去调用别的构造方法,使用在构造方法的首行
class Student {
//非静态属性
String name;
int age;
char gender;
//有参构造
public Student(String name) {
this.name = name;
}
//有参构造
public Student(String name, int age) {
//this()---this语句
//调用构造方法,只能在首行使用
this(name);
this.age = age;
}
}
3.构造代码块
在类内方法外位置{} 构造代码块可以给属性进行初始化,优先于构造方法先执行
public class Demo1{ { System.out.println(“第一代码块”); } public Demo1(){ System.out.println(“构造方法”); } { System.out.println(“第二构造块”); } public static void main(String[] args){ new Demo1(); new Demo1(); new Demo1(); } } /* 执行结果: 第一代码块 第二构造块 构造方法 第一代码块 第二构造块 构造方法 第一代码块 第二构造块 构造方法 */
4.局部代码块
在方法内{} 控制变量的生命周期,提高内存的利用率 。是为了在代码块结束后,内存自动释放
public class ObjectDemo3 { public static void main(String[] args) { int x=1; //局部代码块---控制变量的生命周期 { int y=2; System.out.println(x+y); } //后面有1000行代码都没有使用变量x和y } }
5.成员变量与局部变量的区别
定义位置:成员变量:类内方法外 ;局部变量:方法内
使用范围:成员变量:整个类; 局部变量:整个方法
内存位置:成员变量:堆里 ;局部变量:栈里
生命周期:成员变量:随着对象的创建而产生,随着对象被回收而销毁
局部变量:随着方法被调用执行才产生,随着方法调用结束而销毁