一.匿名对象
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