Java中小知识点总结一

   1.一个Java源文件中只能有一个public类,且类名要和文件名一致,但可以有多个类(不用public修饰符)。

   2.Java程序的入口是 public static void main(String[] args){ },不一定要完全一样,也 可以调换一下修饰符顺序,如写成static public  void main(String a[]){};但必须确保参数是String类型数组,函数类型是public static void 。

   3.类中的静态方法不能直接引用类中的实例变量,和实例方法,但可以引用类中的静态变量和静态方法。实例方法可以引用静态方法 和静态变量。类方法不必创建对象就可以直接调用,而实例方法必须先创建对象,才能调用。

/**
 * 静态方法不能直接引用类中的实例方法,和实例变量。
 * 但实例方法可以引用静态方法 和静态变量
 * @author jxm
 */
public class Test {
	
	private String a="Hello";
	public static String b="hi";
	
	public static void say(){
		
		System.out.println(b);
		//speak("你好");//错误,静态方法不能直接引用类中的实例方法。
		//System.out.println(a);//错误,静态方法不能直接饮用类中的实例变量
	}
	
	public void speak(String str){
		System.out.println(str);
		say();//正确,实例方法可以引用静态方法 和静态变量
		System.out.println(b);//正确
				
	}
	
	public static void main (String []args){		
		say();		
		//speak("你好");//错误,静态方法不能直接引用类中的实例方法。
		new Test().speak("你好");//正确,可以通过实例对象,类引用实例方法				
	}
		
}
    4. 接口中的方法都是抽象方法,不能实现,如果要实现要声明为static静态方法,成员变量只能用修饰符final,static 和public修饰,不能用protected和private修饰。

    5.局部变量是不能使用访问修饰符(private, public,protected)修饰的,因其本身就只能在一个程序块内使用。但可用final修饰。

    6.定义类时,如果没有给出构造函数,系统会提供一个默认的无参构造方法。但如果类中提供了构造函数,则没有默认构造函数。这样在创建对象时如果使用了无参构造函数进行创建对象(注意:类中也没有提供无参构造函数时),就会报错。

    7.创建子类对象时,会首先调用父类的构造函数(默认会调用父类的无参构造函数,也可通过super()调用指定的构造函数,如果父类没有无参构造函数,且没有通过super调用超类的其他构造函数,则子类找不到,就无法调用,会报错),再执行子类的构造函数中相应的处理。

class A1{
	
	public A1 (){		
		System.out.println("我是A1");
	}
	
	public A1(String str){
		System.out.println("我是A1"+str);
	}
	
}

class B1 extends A1{
		
	public B1 (){		
		System.out.println("我是B1");
	}
	
	public B1(String str){
		System.out.println("我是B1"+str);
	}
	
}

public class B extends B1 {
	public B(String a){
		System.out.println("我是B"+a);
	}
	
	public static void main (String []args){	
						
		new B("f");
	}
	
	
}
运行结果为输出:
          我是A1
          我是B1
          我是Bf
      8. 调用函数时的参数传递:基本类型的参数传递是传值调用,也就是实参把值传给形参变量,所以对形参的修改不会影响到实参的值。参数是对象引用时,方法调用可以改变对象参数的内部状态,但方法调用不能改变对象参数的引用(因为传递的是引用(引用是指向某个存储空间的地址),从存储的角度考虑,也就是使形参变量也指向某个存储位置,这样通过形参改变值时,会修改内存中存储的值。其本质应该也可以看为“传值”,只不过一个传递的是具体的数值,而一个传递的是地址)。 

       9.实例变量属于特定对象,静态变量被类中的所有对象共享,  静态变量在类加载到内存时建立,在实例化对象时,并没有对静态变量进行处理。如:在类A中声明了一个静态成员变量static String str="hello";   在使用时修改了静态变量的值 如A.str=" 你好";此时创建一个A的对象new A(); str的值不会改变,仍是hello。

      10.Java中double(float)类型 有两个特殊值:Infinity和NaN,0.0可以作为除数,如:1.0/0.0=Infinity   ; -1.0/0.0=-Infinity ;  0.0/0.0=NaN; 但整数相除时,0为除数会报错。

       11.逻辑操作符:&(与)、^(异或)、|(或)不管表达式两边的条件是否成立,都会执行运算;短路运算符:&&、||,如果通过左侧的操作数就可以进行判断,则不会在计算右侧的操作数了。

      12.Java会分配一个存储区域来存储常量,对于字符串常量,如果定义了两个字符串变量,且值都初始化为了同一个字符串常量,则这两个变量是对同一个存储位置的引用,都指向这个常量所在位置。

       13.==和equals()方法的区别:==操作符运来比较两个变量的值是否相等(对于基本类型而言,值就是它代表的存储空间的值,对于对象引用而言,它存储的值是它所指向的对象的地址,所以,若两个引用变量是对同一个对象的引用,则它们相等);默认的equals方法定义在Object中,本质是==比较,但String ,Integer等类重写了该方法,比较的是对象的内容,而不是引用变量的值(地址)。自定义类时,可根据需求重写equals方法。




猜你喜欢

转载自blog.csdn.net/u012221316/article/details/51119038