1. 多维数组第一维的长度必须固定,但是第二维的长度可以不同,因为第一维中相当于存的是一个引用。这个引用指向的是第二维的数组空间。如下例:
int [][]a;
a=new int[3][];
a[1]=new int[2];
a[2]=new int[3];
2. 变量顺序
(静态变量,静态程序块)>(变量,初始化块)>构造器
父类静态>子类静态>(父类普通变量,初始化块)>父类构造器>(子类普通变量,初始化块)>子类构造器
变量和初始化块的顺序尤其在代码中的顺序决定
3. split的用法误区:aplit(separator,limit) 其中limit表示字符串会被分成几部分,separator是一个正则表达式,
需要完全符合正则表达式的用法。对于下列特殊字符,必须用转义符来实现:比如aplit("\\+")正确写法;
aplit("+")会报错的。
特殊字符: * + . 等这些必须前面加转移符。
4.定义实例变量时指定的初始值、初始化块中为实例变量指定初始值的语句的地位是平等的,当经过编译器处理后,
他们都将被提取到构造器中。
public class A {
{
System.out.println("a");
count=30;
}
int count=20;
public A(){
System.out.println("b");
System.out.println(count);
}
public static void main(String []args){
A a=new A();
}
}
结果:
a
b
20
这里需要强调的是,count的值是20,而不是30.这是因为java里定义语句和赋值语句不一定一起执行,虽然在定义的时候就已经赋值:如int count=20,实际上会被分割成两步:
(1) int count;
(2)count=20;
而jvm编译的时候,会先定义变量,然后把定义实例变量时指定的初始值,初始化代码块中为实例变量指定的初始值都合并在构造器中,并且顺序和源代码中赋值语句的顺序一致。
5. 关于类中定义本类的对象
public class A {
A a=new A();
public A(){
System.out.println("b");
}
public static void main(String []args){
A aa=new A();
}
}
//结果:会产生死循环,因为实例化aa时,A里定义的变量a又需要实例化,
//就会产生一个init的死循环。
但是下面的代码就不会产生错误
public class A {
static A a=new A();
public A(){
System.out.println("b");
}
public static void main(String []args){
A aa=new A();
}
}
因为类里的A是静态的,只要实例化一次,所以不会产生死循环
6. new Class() 会判断该类是否已经加载,如果加载,直接进行内部的初始化,不用管类里的static变量。
如果没有,则先加载该类,就是加载类的字节码,然后初始化其中的静态变量。具体题目见《疯狂java》P28 下
7. final 修饰的变量或类变量,只有在定义的时候初始化才能是宏替换,否则在初始化块或静态初始化块中的
不能宏替换。P53
8. 对于一个引用类型的变量,当通过该变量访问它所引用的的对象的实例变量时,该实例变量的值取决于声明该变量时
的类型,当通过该变量来调用它所引用的对象的方法时,该方法行为取决于他所实际引用的对象的类型。P39
但是类中的静态变量和方法都是依靠类来调用的,所以类的对象来调动静态方法,最后是通过类来调用的。 父类和子类都有静态方法A,如果把子类的对象付给父类的引用,那么通过父类的引用调用方法A,会调用父类中的方法 P207
package interview;
public class Vehicle {
int num=1;
public Vehicle()
{
System.out.println("vehicle");
}
public void run()
{
System.out.println("Vehicle Runs");
}
}
package interview;
public class Car extends Vehicle {
int num=2;
public Car() {
System.out.println("Car ");
}
public void run()
{
System.out.println("Car Runs");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Vehicle v=new Car();
System.out.println(v.num);
v.run();
}
}
运行结果:
vehicle
Car
1
Car Runs
方法有多态,变量没有。所以什么类型的引用,调用该类型中的变量
9. 内部类(局部内部类)访问的局部变量必须用final修饰。这是因为局部变量的作用域在方法内,该方法结束后,
该变量 就结束了。但是内部类可能产生隐式的闭包,这个闭包可以使被引用的局部变量脱离原来的方法继续存在,
也就是说扩大了局部变量的作用域,如果没被final修饰,该值可以随意改变,会引起混乱。P55
10.java编程中的重载和覆盖的条件
重载方法必须满足下列条件
(1) 方法名必须相同
(2) 方法的参数签名必须相同
(3) 方法的返回类型和方法的修饰符可以不相同
方法覆盖必须满足下列条件
(1) 子类的方法的名称及参数必须和所覆盖的方法相同
(2) 子类的方法返回类型必须和所覆盖的方法相同
(3) 子类方法不能缩小所覆盖方法的访问权限
(4) 子类方法不能抛出比所覆盖方法更多的异常
分享到:
相关推荐
Java基础知识1,Java基础知识1
java基础知识,帮助初学者更快更好地掌握java。ppt内容具体易懂,希望对刚接触java的初学者有所帮助。
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。
Java 基础知识大全 本资源摘要信息是 Java 基础知识大全的总结,涵盖了 Java 语言的基本概念、特点、历史发展等方面的知识点。以下是本资源摘要信息的详细内容: 一、 Java 语言的特点 * 面向对象:Java 语言是...
JAVA基础知识总结 JAVA基础知识总结 JAVA基础知识总结
java基础知识的培训ppt,对于java初学者来说可以有一些作用。
Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...
Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...
### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...
java基础知识
自己在网上找的相对好一点的java复习资料,留个纪念 。详细讲述了Java课程的知识点
java基础知识点总结及面试问题java基础知识点总结及面试问题java基础知识点总结及面试java基础知识点总结及面试问题
java基础知识点,面试宝典,最适合你的java面试知识点,所学java知识点总结
Java基础知识总结涵盖了Java程序设计语言的核心概念和常用知识点。在详细学习和总结这些知识点之前,首先需要对Java有一个整体的认识。Java是一种面向对象的编程语言,它具有跨平台的特性,即“一次编写,到处运行”...
Java基础知识.pdf
Java基础知识总结 一些的基础知识 适合初学者和回顾以前的知识