java中有些概念不清的东东

来源:互联网 时间:1970-01-01

话题一:变量1:局部变量:在某个方法里面声明的变量
注意:◆一定要先赋值,再使用。
◆作用范围是定义它的代码块,{}
◆两个局部变量在同一范围内不能命名冲突
2:实例变量:某个对象的非静态属性
◆如果没有给它进行赋值,系统可以对它进行默认赋值,默认值也可以使用(与局部变量的区别)
◆一个局部变量和实例变量在同一个范围内,可以命名冲突,并且局部变量覆盖实例变量
class c{
int a=10;
public void m(){
a=20;
System.out.println(a); //输出20
}
}
3:类变量:某个类的用static 修饰的属性(静态属性)
只初始化一次,多个类共有一份。

话题二:数组
1:计算机中的三个空间
◆栈空间: 临时变量,引用类型的变量
◆堆空间:对象存储区。
◆代码空间(方法空间):类的描述信息
注意:用new申请的空间都是在堆空间里面的。所有的类和对象都放在堆里面,如果只是一个引用,那么只在栈空间中给开辟一个存放地址的空间。
例如:A a =new A();
那么a 在栈空间,A的代码在方法空间,对象在堆空间。
2: 数组:一个数组本质上就是一个对象。
(1)Person [] p ;声明一个数组的引用时候并没有创建一个对象。
注意:声明一个引用的时候,不能加上长度。例如:
Person [10]p :就是错误的。
(2)Person []a=new Person [100]; 给这个数组在堆空间中申请空间。但是各个元素还需要重新赋值。
例如:a[0]=new Person();
3: 如果只是声明没有初始化的时候,系统会为每个元素给一个默认的初始值
◆Int : 0
◆boolean : false
◆Float/double : 0.0
◆Char : ‘/u 0000’
◆String : null

话题三:方法重载和覆盖
1:重载(overload ):
(1)要求:方法名相同,参数列表不同。别的一概不考虑
(2)发生范围:同一个类或父子类之间都可以有方法重载的实现。
父子类的实现,例如:
class A{
Public void m(long a ){}
}
Class B extends A {
Public void m(int a ){}
}
2:覆盖(override):
(1)发生范围:父子类之间;
(2)要求:名字,参数列表,返回值相同,修饰符号可见范围扩展。

话题四:参数的传递
1:基本数据类型:值传递
2:对象类型:引用传递和值传递结合
public class Test1 {
public static void test1(String str){
str="world";
}
public static void test2(Animal a){
//a=new Animal();
a.setAge(10);
}
public static void main(String[] args) {
//测试String类
String string="hello";
test1(string);
System.out.println(string);
//测试普通的自定义类
Animal an=new Animal (20);
test2(an);
System.out.println(an.age);
}
}
/**对于引用变量本身来说,是一种值传递,即引用不能再指向另外一个对象,对于引用所指向的对象来书,又是一种引用传递,这个对象的属性可以改变*/
class Animal{
int age;
Animal(){}
Animal(int age){
this.age=age;
}
public void setAge(int age) {
this.age = age;
}
}

注意:只有用new关键字的时候才是创建了一个新的对象,否则 只是取得了一个对这个对象的引用。例如:
Student a =new student ;//创建了一个对象
b=a ;//只是声明了一个引用
3:string 类,stringBuffer ,StringTokenizer
(1):String :
系统为我们提供的不可变类型,内容是不变的,
优点:可以共用
缺点:不停的创建新的对象,
解决方案:用stringbuffer 替代。
(2):StringBuffer:带缓冲的字符串对象,对象是可以修改的
(3):Stringtokenizer:String的工具类,用于根据分隔符将字符串分隔成字符串的数组。是出于兼容性的原因而被保留的遗留类(不鼓励使用)。

话题五:java 的三大特性(封装,继承,多态)
一:封装(encapsulation):
二:继承:(inheritance)
1:书写方式:class A extends C{}
2:原则:把公共的特点抽象出来放在父类里面,一个类只能由一个父类。
3:权限:
◆Public: 公开 可以继承
◆Default: 本类+同包 子类若与父类同包则可以继承
◆Protected:本类+同包+不同包子类 可以继承
◆Private:本类内部访问 不会继承
注意:属性和方法可以被继承,但是构造方法不能被继承
4 :不用继承实现方法的扩散,(委托模式)
Class C{
Public void m(){}
}
Class A{
C c=new C();
}
A把拥有这个方法的类C作为自己的属性,那么当调用A的m()的时候,A就可以调用C的m()方法.
调用的书写方式:A.C.m();

三:多态(polymorphism) (统一管理)
1:弄明白互相赋值许可:(同样影响强制类型转换的原因)
子类可以赋值给父类,但是父类不能赋值给子类
例如: Animal c=new Dog();
大小: 19.5 KB 大小: 11.2 KB



相关阅读:
Top