Java系列8—对象创建的内存分配和构造方法
其他
2020-06-20 10:24:48
阅读次数: 0
对象的创建
-
类和对象的区别
面向对象【java语言的核心机制,最重要的内容,java语言的特色】
* 面向过程和面向对象的区别
-- 面向过程:主要关注点是:实现的具体过程,因果关系
-- 面向对象:主要关注对象【独立体】能完成哪些功能。
优点:耦合度低,扩展力强。
缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统设计
-- c语言是纯面向过程的、C++半面向对象、java纯面向对象
* 面向对象的三大特性
—— 封装
—— 继承
—— 多态
面向对象的分析:OOA
面向对象的设计:OOD
面向对象的编程:OOP
* 类和对象的概念
* 什么是类?
—— 类是一个概念,又名类型,代表了一类事物
—— 在现实世界当中,对象A与对象B具有共同特征,进行抽象总结出的模板
* 对象?
—— 是实际存在的个体。现实当中实际存在
类——>【实例化】——>对象
对象又被称为实例/instance
对象——>【抽象】——>类
* 一个类主要描述什么信息呢?
一个类主要描述的是状态+动作。
* 类的定义
语法结构:
[修饰符列表] class 类名{
}
-
java虚拟机内存分配
1、JVM(Java虚拟机)主要包括三块内存空间,分别是:栈内存、堆内存、方法区内存
2、堆内存和方法区内存各有一个,一个线程一个栈内存。
3、方法调用的时候,该方法所需要的的内存空间在栈中分配,称为压栈。方法结束之后,
该方法所属内存空间释放,称为弹栈。
4、栈中主要存储的是方法体当中的局部变量。
5、方法的代码片段以及整个类的代码片段都被存储在方法区内存当中,在类加载的时候,
这些代码片段会载入。
6、在程序执行过程中使用new运算符创建的java对象,存储在堆内存中.对象内部有实例,
所以实例变量存在堆内存中.
7、变量分类:
- 局部变量【方法体中声明】
- 成员变量【方法体外声明】
实例变量【前边修饰符没有static】
静态变量【前边修饰符中有static】
8、静态变量存储在方法区内存当中
9、三块内存变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对堆内存。
10、垃圾回收器【自动垃圾回收机制,GC机制】
* 当堆内存当中的java对象成为垃圾数据的时候,会被垃圾回收器回收。
* 什么时候会变成垃圾呢?
没有更多的引用指向它的时候
这个对象无法被访问,因为访问对象只能通过引用的方式
-
对象的创建和使用
public class OOTest01
{
public static void main(String[] args){
Student s = new Student();
int stuNo = s.no;
int stuAge = s.age;
String stuName = s.name;
boolean stuSex = s.sex;
System.out.println("姓名:"+stuNo);
System.out.println("年龄:"+stuAge);
System.out.println("姓名:"+stuName);
System.out.println("性别:"+stuSex);
s.name = "张三";
System.out.println("姓名:"+stuName);
System.out.println("姓名:"+s.name);
Student stu = new Student();
System.out.println(stu);
}
}
public class Student
{
String name;
int age;
int no;
boolean sex;
}
-
java中的构造方法
(1)构造方法综述
package test003;
public class ConstructorTest01 {
public static void main(String[] args) {
User u = new User(3);
new User();
new User("hello");
u.doSome();
User.doSome();
u.doOther();
}
(2)、构造方法的作用
package test003;
public class ContructorTest02 {
public static void main(String[] args) {
Account a = new Account();
System.out.println(a);
Account a1 = new Account("110");
System.out.println(a1);
System.out.println("账户是:"+a1.getActno());
}
}
public Account {
private String actno;
private double balance;
public Account() {
}
public Account(String s) {
actno = s;
}
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
package test003;
public class User {
public User() {
System.out.println("无参数的User构造器");
}
public User(int age) {
System.out.println("带有Int类型参数的构造器");
}
public User(String s) {
System.out.println("带有String参数的构造器");
}
public static void doSome() {
System.out.println("带有static的方法");
}
public void doOther() {
System.out.println("不带static的方法");
}
}
转载自blog.csdn.net/qq_42486675/article/details/106507765