Java-类与对象
学习参考书籍:清华大学出版社的《Java2实用教程》
文章目录
前言
Java是面向对象的编程语言,《Java2实用教程》的第四章开始讲解类与对象,以下是我的学习笔记。有错误的地方,欢迎指正,谢谢!
提示:以下是本篇文章正文内容,下面案例可供参考
一、类
类体中包含成员变量(表示属性) 和 成员方法(表示行为)
成员变量
- 成员变量的类型可以是java中的任何一种数据类型(引用类型:数组、对象、接口也算在内)。
- 成员变量由初始值(构造方法初始化)。
- 成员变量的有效性与位置无关,但书写习惯是先介绍属性再介绍行为。
方法
方法体内的是局部变量,如果成员变量和局部变量名字相同,那么成员变量被隐藏,在该方法中暂时失效。
如果想使用被隐藏的成员变量,必须使用this关键字。局部变量没有默认值,如果不指定一个值,会编译错误。
对成员变量和局部变量的操作只能在方法中。
二、构造方法与对象
类是一种数据类型,用类声明的变量叫对象
当使用类创建一个对象时,称给出了这个类一个实例
1、类、对象和实例的关系
类–>对象–>实例
人类是类
某个人是对象
你是实例
实例本身也是对象表现出来是这样的
String 类
String str str是对象
String str = “abc”; "abc"是实例,也是对象
引自:http://www.blogjava.net/dreamstone/archive/2007/03/04/101733.aspx
对象的变量是它的实体
2、构造方法
1.构造方法与类的名字相同,但没有类型,无返回值
2.可以在一个类中写多个参数不同的构造方法
3.如果没有编写构造方法,系统会自动创建一个没有参的方法
3、创建对象
class A{
public static void main(String srgs[]){
A a;//声明对象a
a=new A();//用new关键字和构造方法,为对象分配变量
}
}
4、匿名类&匿名对象
有名字的类/对象可以重复使用,匿名的没有地址值,使用一次之后就找不到了。
可以在垃圾回收器空闲时回收,节省内存空间。
引自:https://blog.csdn.net/m0_58052874/article/details/123209100
new A()是一个匿名对象,可以用它访问自己的变量
new A().name="Kim";
I]
5、垃圾收集
Point p1=new Point(100,200);
Point p2=new Point(300,500);
p1=p2;//让p1和p2的引用相同
如果让两个对象的引用相同,系统会取消原先分配给p1的变量。Java的垃圾手机机制会自己发现栈中不再被使用的对象,释放内存。不需要像C++一样,需要程序员释放。因此Java很少出现内存泄漏(因为程序忘记释放而导致的内存溢出)。
三、方法的参数
1、形参和实参的关系
方法()里的是形参,向其传值的是实参
实参和形参的值不互相影响
∵参数属于局部变量 ∴调用参数变量必须有具体的值(传给它)
代码
class canshu{
int m,n;
int getInt(int a,int b){
a=500;
return b;
}
}
public class test2 {
public static void main(String args[]){
int x=100,y=300;
canshu A=new canshu();
int changeY=A.getInt(x,y);
System.out.println(x);//在方法中改变a的值,x的值并没有改变。说明形参的改变不会影响实参。
y=-100;
System.out.println(changeY);//在main方法中改变了y的值,但changeY没有改变,说明实参的改变不会影响实参。
}
}
结果
"C:\Program Files\Java\jdk-20\bin\java.exe" "-javaagent:E:\IntelliJ IDEA Community Edition 2023.2.1\lib\idea_rt.jar=18924:E:\IntelliJ IDEA Community Edition 2023.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath E:\JAVA_STUDY\Demo\out\production\oop test2
100
300
Process finished with exit code 0
参数如果是引用型数据,“传值”是地址,不是实体。
如果改变实体,原实体也会改变。
如果改变地址,则不会影响原地址(引用)
2、可变参数
不给参数的名字和个数,参数类型必须相同,用…表示若干参数
void f(int...x){
//称x是f方法中可变参数的“参数代表”
}
参数代表必须是参数列表的最后一个
void f(double y,int...x){
//称x是f方法中可变参数的“参数代表”,double y不可以放在后面
}
运用可变参数的方法:
使用参数代表[下标](从0开始来代表1~m个数字)
java提供了增强for语句 ,for(声明循环变量:参数代表)
for(int i:x){
//循环变量x,遍历参数代表所代表的参数
}
3、黑盒复用
关联关系
A的成员对象是B声明的对象
依赖关系
A类中某方法的参数是B声明的对象/返回值是B类对象
四、实例和类
1、实例变量 和 类变量
1.有static修饰的是类变量,也称static变量,静态变量。static不可以修饰局部变量。
2.不同对象的实例变量各自有内存空间,不互相影响。
3.类变量是所有对象共享的
4.类变量是可以通过类名访问的
2、实例方法和类方法
1.实例方法中可以调用类变量、类方法、实例变量、实例方法。而类方法只能操作类变量,调用类方法。
2.类方法可以用类名调用
3、重载
`1.java中有两种多态:重载和重写。重写和继承有关
2.构造方法也可以重载
3.两个或多个名字相同,但参数数量/类型不同的方法,叫做重载
4.如果出现歧义,将无法通过编译
4、this关键字
1.this可以出现在实例方法和构造方法中,但不能出现在类方法中。
2.在构造方法中出现的this,指代正在创建的对象
3.在实例方法中出现的this,指调用该方法的对象
书写规范:
在实例方法中,static对象的默认格式是 类名.static成员变量名;实例对象的默认格式是this.实例对象名。
可以省略实例对象前的this.和static对象前的类名 。当实例对象和类对象同名时,不可省略。
五、包
1.为来区别名字相同的类,需要用包。
总结
滚去复习了…