2021年1月24日23点20分
JAVA自学课程笔记2:
代码执行过程中的内存管理:
1.heap(堆区)
由A aa = new A();所new出来的东西
2.stack(栈区)
代码的局部变量
3.data segment(数据区)
存放静态变量、字符串常量
4.code segment(代码区)
存放代码
堆区存放的类(class)A aa1所指向其栈区存放的两个整型变量a、b
(class A{int a;int b;}),若也让类A的aa2赋值以aa1,则aa2指向aa1其栈区的两个整型变量a、b。改变aa1的栈区变量,相当于改变aa2的栈区变量。
类的访问控制符:
在一个类的内部,所有的成员是可以互相访问,访问控制符是透明的;访问控制符是针对外部访问而言的。
外部访问包括两种方式:
通过类名访问内部的成员
通过类对象名访问内部成员。
1.默认(无任何修饰符,即default)。
允许外部直接访问。
2.protect
在不同包中不允许互相访问。
3.private
不可以通过外部访问方式访问内部private成员。
若定义一private变量a,则可以通过在a所在的类中构造一个public方法(public void set(int j){a=j;})来在外部改变变量a的值。
4.public
可以通过外部访问方式访问内部public成员。
构造函数:
构造函数在生成(new)一个新类时,该类中的构造函数会被调用。
class A
{
public A(){
System.out.println("无参构造函数调用");
}
public A(int a,int b){
System.out.println("有参构造函数调用");
}
}
class Test
{
public static void main(String[] args)
{
A aa1 = new A(1,2);
A aa2 = new A();
}
}
运行结果:
有参构造函数调用
无参构造函数调用
构造函数是无返回值的,不需要void来定义。
构造函数的名称应与其所属的类相同。
如果不写构造函数,默认生产一个无参的构造函数(如果已写一个有参构造函数,用无参数外部调用,会报错)。
函数的重载:
功能相似的多个函数,可以在类型,形参个数,访问控制符不同的情况下,使用相同的函数名。(不违反查找冲突的情况下)
class A{
public int f(int a, int b){
return (a + b);
}
}
class B extends A{
public int f(double a, int b, int c){
return (int)(a + b + c);
}
}
public class Test1{
public static void main(String[] args){
B bb = new B();
System.out.println(bb.f(1.7, 2, 3));
}
}
//输出结果:6
在类中定义一变量,该变量为此类的属性。在定义后不附值,外部引用时相当于已初始化(值可以为:0,0L,0.0F,0.0D,\u0000(空),False,Null),因为其看作为类的属性。而若是在所引用的类中定义一变量不附值,则看作非初始化局部变量报错。(属性不初始化是零值,局部变量不初始化是垃圾值。)
this指针:
this == 当前对象
当创造于同一个类A上的两个不同对象aa1和aa2时,原先基础的类定义中的public整型i不被共用,但存在一非static方法public void show()(能打印出i)被aa1和aa2共用,show方法通过隐含的this指针知道目前正在调用该方法的对象。
定义时等同于:
public void show(){
System.out.printf("i = %d\n",i);
}
==
public void show(A * this){
System.out.printf("i = %d\n",(*this).i);
}
调用时等同于:
aa1.show();
==
aa1.show(aa1);
若在一个类A中存在一个公共整型变量i,同时在该类的构造函数中也定义了一个形参i。当想要把构造函数中的i发送到公共变量i中时,可以使用this指针表示当前正在调用的对象aa1,this.i相当于对象aa1中的公共整型变量i。
class A{
public int i = 99;
public A(int i){
this.i = i; //this代表目前正在创建的对象
System.out.printf("%d\n",i);
}
public void show(){
System.out.printf("%d\n",this.i);
}
}
通过A aa = new A(2);和aa.show();语句得到输出结果:
2
2
JAVA自学课程笔记2
最新推荐文章于 2024-09-15 09:47:04 发布