基础知识笔记

String s 只是创建引用,并不是对象。如果此时调用了s得一个函数,则会报运行时错误。
**Java中没有无符号的整形或者Char,都是带符号的。**

Java中是不允许下面的代码,即内部变量不可以覆盖外层变量。
{
String s = "hele";
{
String s2="test";
System.out.println(s.length());
}
}

let,就是一个小装置,或者小程序的意思。
比如applet,就是小应用程序,可以嵌入在网页内,而servlet,也是小程序,不过是在服务器端运行的而已
需要强调的是,这两个词都是新生的英语词汇,只在计算机程序设计领域有意义

整数提升
任何比int小的数据(byte,short),在计算时都会将其转换为int。如果想把结果转换为自身类型,则必须进行强制类型转换,比如short a = short b + short c;则会提示错误,因为b+c计算后是int类型,必须强转之后才能赋值给a,而 a += b 则会进行隐式类型转换。

java中没有sizeof,在C中由于int在不同环境下大小不同,所以需要sizeof,而java中所有地方大小都是相同的,int四字节,不需要sizeof操作符。
不能对boolean值进行相加或者其他任何计算。另外由于Java是Unicode得,Char类型的是2字节。


static方法就是没有this的方法。

由于不存在this,所以不能通过“向对象发送消息”,即static方法不能调用非static得方法。

构造器是一个特殊的static方法,构造函数可以调用非静态函数。

将不需要被覆盖的方法定义为final的好处,可以避免被误覆盖。更重要的原因可以关闭动态绑定,这样编译器不需要进行处理动态绑定,可以为final的方法调用生成更有效的代码。

如果子类中的成员变量覆盖了父类的成员变量,则在访问父类的成员变量时候需要用super.field来访问,但是通常情况下成员变量应该定义为Private的,并且子类不应该覆盖父类的成员变量。

协变返回类型:在子类中得被覆盖的方法可以返回父类的返回类型的子类。

interface中所有的成员变量会被默认设置为static并且是final的。在Java5之前经常用此特性来定义枚举类型。java5之后有了enum后,就不需要了,但是在老代码中还可以看到。

正因为是static,final的,一般接口中得变量都是全大写。

interface Montsh{
	int JANUARY=1, FEBRUARY=2,...
}

嵌套类和内部类的区别:

嵌套类的创建不需要外部类对象,内部类则默认隐含一个构造函数参数即外部类的实例。

不能从嵌套类的对象中访问非静态的外部类对象。

普通内部类的字段和方法,只能放在类的外部层次上,也就是说必须先有外部类的实例,才有内部类的创建,所以普通内部类不能有static的数据和字段,也不能包含嵌套类。

class Outer{
	Outer(){
		System.out.println("create outer!");
	}
	
	class Inner{
		Inner(){
			System.out.println("create inner!");
		}
	}
}

public class MainClass{
	public static void main(String[] args){
		Outer o = new Outer();
		Outer.Inner i = o.new Inner();//必须先有外部类的实例,然后通过 [外部类实例.new] 的形式创建
		System.out.println("ok");
	}
}

内部类继承

由于内部类必须要有外部类的实例作为参数,上例中内部里创建的时候是由语言本身来实现的一个隐含的参数。如果想继承一个内部类的话,需要显示的进行调用。

class Outer{
	Outer(){
		System.out.println("create outer!");
	}
	
	class Inner{
		Inner(){
			System.out.println("create inner!");
		}
	}
}

class SubInner extends Outer.Inner{
	SubInner(Outer o){
		o.super();
		System.out.println("Create SubInner!");
	}
}

public class MainClass{
	public static void main(String[] args){
		Outer o = new Outer();
		SubInner s = new SubInner(o);
	}
}

内部类可以被子类所覆盖,但是不会出现多态的效果。

嵌套类

嵌套类的概念稍微简单些,可以理解为限制在某个类命名空间的一个内部静态类。
class Outer{
	Outer(){
		System.out.println("create outer!");
	}
	
	static class Inner{
		Inner(){
			System.out.println("create inner!");
		}
		
		void func(){
			System.out.println("Nested inner func!");
		}
	}
}

public class MainClass{
	public static void main(String[] args){
		Outer.Inner nested = new Outer.Inner();
		nested.func();
	}
}

接口中的内部类

接口中的内部类都是(默认)public,static的,所以内部类都是nested的,仅仅是将其放在interface的命名空间中而已。

《完》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值