方法的学习

10 篇文章 0 订阅

java学习第五周

  • 1、对于上期this学习的补充。

    this修饰的方法。

public class ThisFangFa{
	String name;
	int number=1;
	int age=18;
	String sort;
	public ThisFangFa(){
        //如果这里this(12,2);不写在第一行也是会报错的。
        //注意,这里如果写成this.ThisFangFa(12,2);会报错。报错:找不到符号。
        this(12,2);//下面new 进来后顺序执行。
		this.nameShow();//this.__如果横线上是成员方法,那是可以多次this来实现的。
		this.show();
		System.out.println("构造方法中的无参构造");
        System.out.println("------------------------");
		//如果构建了有参构造是不会自己再构造无参构造的
		}
		public ThisFangFa(String name){
			this();//this()会根据后面括号内的参数来找到相应的语句。
		}
    /*
		public void show(){
			//this();//如果这里使用的话,会报错不在第一行。
            //this可以在实例方法和构造方法中使用。也就是说不能在这个方法里面使用。
			System.out.println("name="+ name);
			
		}
	*/
		public ThisFangFa(String name,String sort,String lastName){
			this.name=name;
			this.sort=sort;//这里this后,后面再这样赋值也是传进去的值,而不是默认值。
			System.out.println("name  "+name+"\n"+"sort  "+sort+"\n"+"lastName  "+lastName);
		}
			public ThisFangFa(int age,int number){
			this.age=age;//this的作用这里又可以证实是传递实际参数呢
			this.number=number;
            System.out.println("------------------------");
			System.out.println("age="+age+"  "+"number="+number);
			}
			public void nameShow(){
				System.out.println(name+sort);
			}
   public static void main(String[] args){
      ThisFangFa f1=new ThisFangFa();//无参构造,这里会调用无参?这里的意思是调用的上面的无参构造。
      //f1.show();//但是这里输出就是null了。然后这里因为没有东西传进String name所以就是默认值了。
		ThisFangFa f2=new ThisFangFa("l","x""m");
       f2.nameShow();//输出所有字符。
       //难道这里使用 __.___不能对构造方法使用吗?
       ThisFangFa f3=new ThisFangFa("penguin");//这里f1,f2,f3不可以重复用。
       //例如:
 	/* 	ThisFangFa f1=new ThisFangFa();
 		ThisFangFa f1=new ThisFangFa("l","x");
 		会报错已在方法main中定义了变量f1
 	*/
		//这个new结束后,对于下一个新的f1 new的直接给GC了吧
		
		
	}
			
}

输出为:

------------------------
age=12  number=2
nullnullnull
name= null
构造方法中的无参构造
------------------------
name  l
sort  x
lastName  m
lxm
------------------------
age=12  number=2
nullnullnull
name= null
构造方法中的无参构造
------------------------

总结 :

1、a.如果是构造方法中,this();以这种形式,然后根据参数不同,来调用相应参数的构造方法。

​ b.如果是其他的成员方法,就this可以省略。写成this.show();show();效果是一样的。

2、this();得写在第一行。而且this是在构造方法中(和实例方法)才能使用,不然会报错。

3、构造方法中使用this()可以调用对方(例如上面的ThisFangFa(String name)就调用了ThisFangFa())。注意:构造方法中不要写成了this.类名。

  • 2、 构造方法。
public class GouZaoFangFa {
 public static void main(String[] args) {
 wuCanGouZao method=new wuCanGouZao();
 System.out.println(method);
 }
}
class wuCanGouZao {
 }

并没有报错,而且输出为:

wuCanGouZao@15db9742

如果类中没有任何构造方法,系统会给一个默认的无参构造;

构造方法不需要写返回值,但是他的返回值还是存在的,返回为this其类型为所代表的类型。(类是一种特殊的数据类型,包含了一些基本数据类型,引用类型和方法。)

public class GouZaoFangFa {
 public static void main(String[] args) {
	    //注意这里没有用new了。
 wuCanGouZao method = wuCanGouZao.getCanShu("pz",18);//---------也就是说这里有问题。
		//wuCanGouZao method = new wuCanGouZao("pz",18);//这里面的方法用了private修饰后,就不能这样写了。 
	method.getCanShu("pz",18);
	method.show();
	//就是在外部传参。		                 //如果把参数消掉,对应调用方法又不行。
    //System.out.println(method);//但是这里的输出应该怎么用呢?
 
 }
}
class wuCanGouZao {
	private String name;
	private int age;
	
	/*private wuCanGouZao(String name,int age) {
		this.age=age;
		this.name=name;
	}*/
	
	public static wuCanGouZao getCanShu(String name,int age) {
				//也就是说这个也属于构造方法里面?不然这show下面的怎么就可以了?
				//所以这种下面show中的方式是不需要new的一种调用构造方法的方式?
				//如果去掉了 类名的话(也就是wuCanGouZao)那也会报错,说什么需要返回类型。
				//public 这里使用,void会报错,如果我需要用void
	wuCanGouZao canShu = new wuCanGouZao();
			//参数对应不上也会报错?//这还是根据构造方法是否对应的上。
			//这个如果没有this上面的语句,也会报错的。所以这个new语句是什么意思?
			//以前也没有在方法里面来new实现过,参数什么的和调用之类的,都没有实现过。
	System.out.println(name+"  "+age);//那如果我要在外部输出呢?
	return canShu;//这个能调用吗?//对于这个canShu怎么调用?
	}
	
	public void show() {
		wuCanGouZao can = wuCanGouZao.getCanShu("pz",18);
			//也就是说这也是一种直接不需要写new语句的?
			//wuCanGouZao can = new wuCanGouZao("pz",18);
			//跟在上面GouZaoFangFa中要求一样。
			//如果需要在方法里面new的话,要求是什么?
		can.getCanShu("pz",18);
	}
	
	
 }

输出为:

pz  18
pz  18
pz  18
pz  18

下面再给一段的:

public class PrivateV {
public static void main(String[] args) {
	S sum = S.age(10);//没有在这里面new
	}
}
class S {
	private int age=9;
	private int year;
	public S(int age) {
		this.age=age;
	System.out.println(12);
	}
	 
	 public static S age(int age) {
	 S s = new S(age);//如果这里括号内为我在上面定义的year的话,就会报这个错:无法从静态转为动态。//所以这里的static不能忘记写了。
	 System.out.println(age);
	 return s;//这里的返回类型目前还不知道有没有其他的
	 }
	}
//而且如果上面写成:S s = new S();那么则需要有一个相应的无参构造出现,或者没有一个有参构造,系统会默认的一个无参构造。

输出为:

12
10

先输出S的构造方法中的,再输出S age的。


  • 3、类方法(static{}形式 )
public class LeiFangFa{
public static void main(String[] args) { 
	System.out.println("语句一");
	 
	}
	 static {
	System.out.println("static类方法");
		}
}

上面的这段输出是什么?

输出为:

static类方法
语句一
public class LeiFangFa{
public static void main(String[] args) { 
	System.out.println("语句一");
	 Lei lei = new Lei();//一次调用
	 Lei lei2 = new Lei();//二次调用,看是否会输出两次static类方法
	}
}
class Lei {
	public Lei() {
		System.out.println("构造方法");
	}
	static {
		System.out.println("static类方法1");
		System.out.println("static类方法2");
	}
}
//lei和lei2 说明了static语句只执行一次。初始化输出完了就结束了。

输出为:

语句一
static类方法1
static类方法2
构造方法
构造方法

上面这些例子说明,static(类方法)会在类初始化的时候就进行了实现。所以输出才会在最前面。而且还是遵守按顺序执行。

  • 4、 实例方法。({}形式)

    public class ShiLiFangFa {
    public static void main(String[] args) {
    	
    	System.out.println("100");
    		{
    		  System.out.println("语句一");
    		}
    	ShiLi shili = new ShiLi();
    	ShiLi shili2 = new ShiLi();
    	}
    		{
    		System.out.println("语句二");
    		}
    }
    class ShiLi {
    	
    	public ShiLi() {
    		System.out.println("构造方法");
    		System.out.println("---------");
    	}
        	{
    			System.out.println("实例方法1");
    			System.out.println("实例方法2");
    		}
    }
    

    输出为:

    100
    语句一
    实例方法1
    实例方法2
    构造方法
    ---------
    实例方法1
    实例方法2
    构造方法
    ---------
    

    实例方法可以在main中使用,而static(类方法)却不行,不过输出只输出了语句一,而没输出语句二。然后调用构造方法,这里和static不同的是这里的shili和shili2调用两次,然后实例方法也输出了两次。

注意上下文静态和动态的转变(static)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值