Day1 JavaSE环境配置 Day2 JavaSE基础语法 Day3 JavaSE数组 Day4 JavaSE面向对象(上) Day5 JavaSE面向对象(中) Day6 JavaSE面向对象(下) Day7 JavaSE面向对象 Day8 JavaSE异常处理 Day9 JavaSE多线程 Day10 JavaSE集合 Day11 JavaSE泛类 Day12 JavaSEIO流 Day13 JavaSE反射
上期讲述了JavaSE数组的使用和常见用法和异常,本期主要来讲述JavaSE面向对象和类,内容有点多,大家聚精会神听我说。
以下是本篇文章正文内容
二者的关系:📚 对象,是由类new出来的,派生出来的。 面向对象思想落地实现的规则一💡
Person p1 = new Person();
Person p2 = new Person();
Person p3 = p1;//没有新创建一个对象,共用一个堆空间中的对象实体。
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的) 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。
内存解析💡
解释💡
编译完源程序以后,生成一个或多个字节码文件。 我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。
虚拟机栈,即为平时提到的栈结构。我们将局部变量存储在栈结构中 堆,我们将new出来的结构(比如:数组、对象)加载在堆空间中。补充:对象的属性(非static的)加载在堆空间中。方法区:类的加载信息、常量池、静态域。
类的设计中,两个重要结构之一:属性
不同点💡
在类中声明的位置的不同🖊
关于权限修饰符的不同🖊
默认初始化值的情况🖊
在内存中加载的位置🖊
方法:类的设计中的重要结构,描述类应该具的功能。
权限修饰符 返回值类型 方法名(形参列表){ 方法体 } 注意:static、final
定义:
总结:"两同一不同"
举例一:Arrays类中重载的sort() / binarySearch();PrintStream中的println() 举例二:如下的4个方法构成了重载
public void getSum(int i,int j){
System.out.println("1");
}
public void getSum(double d1,double d2){
System.out.println("2");
}
public void getSum(String s ,int i){
System.out.println("3");
}
public void getSum(int i,String s){
System.out.println("4");
}
//如下的3个方法不能与上述4个方法构成重载
public int getSum(int i,int j){
return 0;
}
public void getSum(int m,int n){
}
private void getSum(int i,int j){
}
举例说明💡
public void show(int i){
}
public void show(String s){
System.out.println("show(String)");
}
public void show(String ... strs){
System.out.println("show(String ... strs)");
for(int i = 0;i < strs.length;i++){
System.out.println(strs[i]);
}
}
调用时💡
test.show("hello");
test.show("hello","world");
test.show();
test.show(new String[]{"AA","BB","CC"});
System.out.println("***********基本数据类型:****************");
int m = 10;
int n = m;
System.out.println("m = " + m + ", n = " + n);
n = 20;
System.out.println("m = " + m + ", n = " + n);
System.out.println("***********引用数据类型:****************");
Order o1 = new Order();
o1.orderId = 1001;
Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。
System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);
o2.orderId = 1002;
System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);
private double radius;
public void setRadius(double radius){
this.radius = radius;
}
public double getRadius(){
return radius;
}
//构造器
public Person(){
System.out.println("Person().....");
}
public Person(String n){
name = n;
}
public Person(String n,int a){
name = n;
age = a;
}
在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。但是, 通常情况下,我们都择省略"this."。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。 在类的构造器中,我们可以使用"this.属性"或"this.方法"的方式,调用当前正在创建的对象属性或方法。但是,通常情况下,我们都择省略"this."。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。
本次文章讲述的是JavaSE面向对象与类(上),讲述的是初始类与对象、JVM中的内存结构、类的属性、属性和局部变量的对比、类的方法、方法的重载、可变个形参的方法、面向对象编程的封装性、类的构造器、this指针、属性赋值顺序等众多知识点,觉得文章帮助到你的,可以点点关注收藏起来,如果有疑问也可以评论区讨论。