基本数据类型在传参中的自顶向下和自底向上;this;访问权限修饰符

博客介绍了数据类型传参变化,当传入参数字节大小与方法声明的形式参数不同时,会有类型提升或需显式窄化转换。还讲解了this在构造器中的使用,最多调用一个其他构造器。此外,阐述了public、默认、private、protected等访问权限修饰符的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型传参变化

  • 在重载方法中,如果传入的参数的数据类型的字节大小小于方法中声明的形式参数类型的字节大小,那么实际数据类型就会提升,char型略有不同,如果无法找到接受char参数的方法,就会直接升到int。
  • 如果传入的参数的数据类型的字节大小大于方法中声明的形式参数类型的字节大小,就得通过类型转换来执行显式窄化转换。如果不这样做,编译器就会报错。
Demotion demotion=new Demotion();
		double x=3.14;
		demotion.f1(x);
		demotion.f2((float)x);
		demotion.f3((long)x);
		demotion.f4((int)x);
class Demotion{
	void f1(char x){
		System.out.println("f1(char)");
	}
	void f1(byte x){
		System.out.println("f1(byte)");
	}
	void f1(short x){
		System.out.println("f1(short)");
	}
	void f1(int x){
		System.out.println("f1(int)");
	}
	void f1(long x){
		System.out.println("f1(long)");
	}
	void f1(float x){
		System.out.println("f1(float)");
	}
	void f1(double x){
		System.out.println("f1(double)");
	}
	
	
	void f2(char x){
		System.out.println("f2(char)");
	}
	void f2(byte x){
		System.out.println("f2(byte)");
	}
	void f2(short x){
		System.out.println("f2(short)");
	}
	void f2(int x){
		System.out.println("f2(int)");
	}
	void f2(long x){
		System.out.println("f2(long)");
	}
	void f2(float x){
		System.out.println("f2(float)");
	}
	
	
	void f3(char x){
		System.out.println("f3(char)");
	}
	void f3(byte x){
		System.out.println("f3(byte)");
	}
	void f3(short x){
		System.out.println("f3(short)");
	}
	void f3(int x){
		System.out.println("f3(int)");
	}
	void f3(long x){
		System.out.println("f3(long)");
	}
	
	
	void f4(char x){
		System.out.println("f4(char)");
	}
	void f4(byte x){
		System.out.println("f4(byte)");
	}
	void f4(short x){
		System.out.println("f4(short)");
	}
	void f4(int x){
		System.out.println("f4(int)");
	}
	
}

上面的代码说明了如果基本数据类型的所占字节空间大于要求的参数的所占字节空间,那么就是窄化转化。

this

如果一个类有多个构造器,并且我们想这个类的在一个构造器中调用另一个构造器,那么该怎么办呢?这时候this边发挥了作用。但是this在构造器里面,最多只能调用一个其他构造器,多了便会报错

  • 在类中的一个构造器中调用另一个构造器
  • 用来表示所在类的引用
class Flower{
	int petalCount=0;
	String s="initial value";
	public Flower(int petals) {
		petalCount=petals;
		System.out.println("petalCount="+petalCount);
	}
	
	public Flower(String ss) {
		System.out.println("s="+ss);
		s=ss;
	}

	public Flower(String s,int petals) {
		this(petals);
		//this(s);  this只能调用一个构造器
		this.s=s;
		System.out.println("String & int args");
	}

	public Flower() {
		this("hi",47);
		//this("fsf"); this只能调用一个构造器
		System.out.println("default constructor (no args)");
	}

}

访问权限修饰符

public class Cookie {
	public Cookie(){
		System.out.println("Cookie Constructor");
	}
	void bite() {
		System.out.println("bite");
	}
}
  • Cookie类是public修饰符,任何都能访问。但是Cookie中的void bite()方法没有修饰符,系统默认其为包访问权限。 所以只有同一包下的类才能访问void bite()方法。
  • private修饰符,是只能本类的中的成员访问 其他的都不能访问。private修饰构造器,可以防止构造器被调用。
  • protected处理的是继承的概念,例如其他包的任何一个类extends了Cookie类,但是由于bite()是包访问权限。 这个类并不能访问bite(),但是如果给bite加protected修饰符,便能访问。protected也提供包访问权限,也就是说,相同包内的其他类也可以访问protected元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值