Java学习历程(5)——构造方法与方法的重载

构造方法与方法的重载

1对成员属性与成员方法的补充

上一章中,我们知道了数据需要具有稳定性,安全性,用private可以对数据进行保护
用public类方法set()等可以规范其修改方式并且避免直接用对象修改数据。那么如果个方法被拿到了,别人不也是想改就改吗?他与原来的有什么区别呢?

        public class  TestUser{
                public static void main(String[] args){
                    User A = new User(); 
                    A.set(6);
                    int G = A.get();
                    System.out.println("A.b.Uid:" + G);
                }
        }
        /*
        D:\A\B>java TestUser
        Mistake!!
        A.b.Uid:15
        */
		结果输出了Mistake,其赋值并没有成功,数据没有被更改!
         这样我们就为他修改数据增加了限定条件。
        class User
        {
            private int Uid = 15;
            public void set(int id){
                if(id > 10 && id < 100)
                    Uid = id;
                else System.out.println("Mistake!!");
            }
            public int get(){
                return Uid;
            }
}

-private(不可修饰类):其他类不可访问被private修饰的方法和变量,但是同一类中的方法可以调用它。
            public class  TestUser{
                public static void main(String[] args){
                    TestUser A = new TestUser(); 
                    A.uPut();
                }
                private void uPut(){
                        System.out.println("A");
                    //输出A
                    }
        }

            public class  TestUser{
                            private void uPut(){
                                    System.out.println("A");
                                /*
                                D:\A\B>javac TestUser.java
                                TestUser.java:11: 错误: uPut() 在 TestUser 中是 private 访问控制
                                                    A.uPut();
                                                     ^
                                1 个错误
                                */
                                }
                    }
             class User
             {
                  public static void main(String[] args){
                         estUser A = new TestUser(); 
                         A.uPut();
                  }
             }

构造方法(构造器)

类分为哪几个部分?
-成员属性,类所共有的特征属性
-成员方法,类所共有的方法行为描述。
它类似于结构体,我们要使用他就必须建立一个对象(类的实例)否则其没有任何意义。
此时我们需要用关键字new来创建一个对象,在Jvm堆内存空间申请开辟一块空间用来产生一个对象
如:
class Student{
		int i;
		public void wuHu();
        public static void main(String[] args){
		Student A = new Student();
        }
}

在这里插入图片描述

基础数据类型ShortIntLongCharByteString(引用数据类型)
默认值000’ ’ (空)nullnull
由此我们可以知道构造方法在堆内存中开辟空间生成对象并给对象的成员属性赋初始值。
如果我们没有定义构造器的参数,那么系统会默认使用一个无参构造,成员属性会被赋默认值。如-TestUser();
-我们只能通过构造器构造对象。
    构造方法有什么特点?
    1.方法名与类名一致。
    2.没有返回值。
    3.无参时系统默认为一个无参构造。当我们定义了一个有参构造时,系统默认的无参构造将消失。
    4.参数个数最多为成员属性的个数,一旦超出将会编译报错。
    5.形参列表要与成员属性类型相匹配否则编译报错。
    
    3例子
    public class  TestUser{
	int b;
    String c;
        public static void main(String[] args){
			TestUser A = new TestUser(3,"wuhu"); 
			TestUser B = new TestUser(); 
            /*
            D:\A\B>javac TestUser.java
            TestUser.java:6: 错误: 无法将类 TestUser中的构造器 TestUser应用到给定类型;
                                    TestUser B = new TestUser();
                                                 ^
              需要: int,String
              找到: 没有参数
              原因: 实际参数列表和形式参数列表长度不同
            1 个错误
            
            此时我们需要人为定义一个无参构造。
            */
            System.out.println(A.b);
            System.out.println(A.c);
		}
     public TestUser(int tb,String tc){
         b = tb;
         c = tc;
     }
}
		4例子
         public class  TestUser{
	int b;
        public static void main(String[] args){
			TestUser A = new TestUser(3,"wuhu"); 
            /*
             TestUser.java:4: 错误: 无法将类 TestUser中的构造器 TestUser应用到给定类型;
                                    TestUser A = new TestUser(3,"wuhu");
                                                 ^
              需要: int
              找到: int,String
              原因: 实际参数列表和形式参数列表长度不同
            1 个错误
            */
            System.out.println(A.b);
		}
     public TestUser(int tb){
         b = tb;
     }
}
无参构造
例如:
    public class  TestUser{
    Byte a;
	long b;
    String c;
        public static void main(String[] args){
			TestUser A = new TestUser(); 
		   System.out.println(A.a);
            System.out.println(A.b);
            System.out.println(A.c);
		}
		/*则其输出
		null
    	0
    	null
    	可见其无参数时的初始值。
    	*/
}
-我们要注意的是A只是一个对象的引用,他存放的是对空间内对象的首地址。
有参构造
    例如:
    public class  TestUser{
	int b;
    String c;
        public static void main(String[] args){
			TestUser A = new TestUser(3,"wuhu"); 
            System.out.println(A.b);
            System.out.println(A.c);
		}
     public TestUser(int tb,String tc){
         b = tb;
         c = tc;
     }
		/*则其输出
        D:\A\B>java TestUser
        3
        wuhu
        可见其参数为成员属性附了初始值。
    	*/
}

方法的重载

什么是方法的重载?
-方法的重载是定义多个同名的方法,每个方法参数都有所不同,用来简化不同数据类型下的各种重复功能的语句,java编译器会自动为我们找到相对应的合适的方法。
如何定义?
1.定义多个同名的方法。
2.参数类型不同,或参数类型顺序不同,参数个数不同。
如构造方法的重载也是一样。
    例子:
	 public class  TestUser{
	 int b;
	 String c;
        public static void main(String[] args){
            TestUser A = new TestUser(); 
            TestUser B = new TestUser(3,"wuhu"); 
            TestUser C = new TestUser("wuhu",3); 
            TestUser D = new TestUser("wuhu"); 
            TestUser E = new TestUser(3); 
            System.out.println("A" + ' '+ 0);
            System.out.println("B" + ' '+ B.b + B.c);
            System.out.println("C" + ' '+ C.b + C.c);
            System.out.println("D" + ' '+ D.c);
            System.out.println("E" + ' '+ E.b);
            /*
                D:\A\B>java TestUser
                A 0
                B 3wuhu
                C 3wuhu
                D wuhu
                E 3
                这就是实现了方法的重载,避免了每种数据类型都设一个新方法名的情况
                同时我们也可以看出System.out.println()也运用了方法的重载,只不过它已经写好了,我们只			   需要调用它即可。
            */
		}
         public TestUser(){}
         public TestUser(int tb,String tc){
         b = tb;
         c = tc;
     }
         public TestUser(String tc,int tb){
         b = tb;
         c = tc;
     }
         public TestUser(int tb){
         b = tb;
     }
         public TestUser(String tc){
         c = tc;
     }
}
 b = tb;
     c = tc;
 }
     public TestUser(String tc,int tb){
     b = tb;
     c = tc;
 }
     public TestUser(int tb){
     b = tb;
 }
     public TestUser(String tc){
     c = tc;
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值