匿名对象 构造方法 重载 构造代码块 this 关键字

时间:2022-09-07 18:25:02

一.匿名对象

1.匿名对象 :没有名字对象

2.匿名对象的使用注意点:

1.我们一般不会用匿名对象给属性赋值,无法获取属性值。

2.匿名对象永远都不可能事一个对象。

3.匿名对象的好处 : 书写简单。

4.匿名对象的使用场景 :

1.如果一个对象需要调用一个方法一次的时候,就可以用匿名对象来调用。

2.可以作为实际参数在方法中调用。

二.构造方法

1.构造方法:在java中类似OC中的初始化方法

2.OC初始化方法的特点 :

1.可以在对象创建时初始化属性值。

2.初始化方法只能被调用一次。

3.构造方法的作用 :给对应的对象进行初始化,对象创建时初始化属性值。

4.如何来创建构造方法:

格式 :

修饰符 类名(参数列表){}

5.构造方法使用注意点:

1.方法名和类名保持一致

2.构造方法没有返回值的。

3.构造方法不是由我们手动调用的,而是在对象被创建时由java虚拟机调用的。

4.如果一个类我们没有给他定义构造方法,jvm在编译的时候会给这个类默认添加一个无参的构造方法。

5.如果你自己定义构造方法,jvm就不会在创建无参的构造方法。这个时候需要自己定义一个无参的构造方法。

6.构造方法中是可以调用普通方法的

在同一个类中,方法的调用直接拿到方法名调用就可以了。

7.构造方法中是可以调用普通(实例)方法。

8.构造方法中是否可以调用构造方法?

可以的

9.构造方法中如何调用的?

this(参数);

10.使用注意点 :

1.this调用构造方法,必须是构造方法中的第一个语句。

2.不要相互调用构造方法。

class Person
{
//公有的属性
String name;
int age; //创建一个构造方法
public Person(String n,int a){ //给属性赋值
name = n;
age = a;
} public Person (){ } //行为 ,普通方法
public void work(){ System.out.println(name +"正在工作");
}
} class Demo1
{
public static void main(String[] args)
{ //创建一个Person对象,同时给属性赋值
Person p = new Person("老王",38); //调用工作的方法
p.work();
//
Person p1 = new Person();
p1.name = "老宋";
p1.work(); }
}
//老王正在工作
//老宋正在工作

  

二.重载

1.重载:在java中方法是可以重名的,我们把这种重名的方法

2.方法重载的使用注意事项:

1.必须是方法名一样,才可以叫方法重载

2.任何方法都可以实现方法的重载。

3.保证参数列表的参数的顺序或者个数不一样

class Baby
{ //公有的属性
String name;
String sex;
int age; {
//调用小孩哭的方法
cry();
} //创键构造方法
Baby(String n,String s,int a){ // 局部变量 :必须初始化 //给属性赋值
name = n;
sex = s;
age = a; } //参数的个数不一样。
Baby(String n,String s){ name = n;
sex = s; } //和第一个对比参数的顺序不一样
Baby(String s,int a,String n){
name = n;
sex = s;
age = a; } //不带参数的构造方法
Baby(){ } //公有的行为
public void cry(){ System.out.println(name+"在哭1");
} public void cry(String name){ System.out.println(name+"在哭2");
} } class Demo1
{
public static void main(String[] args)
{ //创建一个baby类
Baby b = new Baby("狗蛋","男",1);
//小孩饿了
b.cry(); //狗蛋又有一个小弟弟
Baby b1 = new Baby("二狗子","男");
//哇哇地哭
b1.cry();
}
}
//null在哭1
//狗蛋在哭1
//null在哭1
//二狗子在哭1

  

三.构造代码块

1.构造代码块的作用 : 给对象统一初始化。

2.构造代码块的格式 :

{

}

3.注意 :

构造代码块必须是写在成员的位置上的

4.代码块 :

1.构造代码块

2.局部代码块  写在方法中 也是以大括号来表示。

3.静态代码块  后面讲。

5.构造代码块的使用注意点 :

1.java中编译器编译一个java源文件的时候,会把成员变量的声明放在类的最前面。

2.成员变量的初始化都是在构造方法中执行的。

3.一旦经过java编译器编译后,那么构造代码块中的代码会移到构造函数中执行

4.成员变量的显示初始化和构造代码块,按照当前代码的顺序来执行的,谁在后面就显示谁。

class Person
{ //公有的属性
String name;
String sex;
int age; // 问题 : 构造代码块在什么时候被执行。 {
System.out.println("我是代码块");
} //公有的方法
public void work(){ System.out.println(name+"在工作");
}
} class Demo1
{
public static void main(String[] args)
{ Person p = new Person(); Person p1 = new Person(); Person p2 = new Person();
}
}
//我是代码块
//我是代码块
//我是代码块

  

四.this 关键字

1.this : 代表所属方法的调用对象。和OC 中的self很象。

2.this关键字的作用 :

1.如果成员变量和局部变量重名,在方法中时默认调用局部变量,通过this可以让方法调用成员变量。

3.this关键字的使用注意点 :

1.存在域成员变量同名局部变量,方法内部会访问局部变量(java采用一个就近原则)

2.在方法中不存在和成员变量同名的局部变量,java编译器在编译时会默认给变量前面加一个this.

class Person
{
//公共属性
String name; //构造代码块 //创建一个构造方法
public Person (String name , int age){ //就近原则 this.name = name; // 两个name都是指的时局部变量的name.
this.age =age; // 两个age都是指的时局部变量的age } int age = 20; {
age = 18;
} public void work(){ //创建一个局部变量 变量名也叫name
//String name = "老宋"; System.out.println(name+"在工作");//null
} } class Demo1
{
public static void main(String[] args)
{ Person p = new Person("老王",30); p.work(); System.out.println(p.age); //打印老王的年龄 //老曹 :20 老肖:18 老陈:18 老王 :20 }
}
//老王在工作
//30