对象的创建
-
类和对象的区别
面向对象【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){
// 通过一个类可以实例化N个对象
// 实例化对象语法:new 类名();
// new是java语句当中的一个运算符
// new运算符的作用是创建对象,在JVM堆内存中开辟新的内存空间
// 方法区内存在;类加载的时候,.class字节码文件被加载到该内存空间当中
// 栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈中压栈
// 堆内存:new产生的对象
// Student是一个引用数据类型
// s是一个局部变量,存储在栈内存中
// new Studnet()是一个学生对象
// s是一个局部变量,存储对象的内存地址
Student s = new Student();
// 什么是对象?new运算符在堆内存中开辟的内存空间称为对象
// 什么是引用?引用是一个变量,只不过这个变量保存了内存地址
// 访问变量实例的语法格式
// 读取数据:引用.变量名
// 修改数据:引用.变量名 = 值
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);
// stu也是一个引用,存储新实例的内存地址
Student stu = new Student();
System.out.println(stu);
// 编译报错:
// 通过实例才能访问实例变量,不能直接通过类名的格式访问
// System.out.println(Student.no);
}
}
/*
局部变量在栈内存中存储
成员变量中的实例变量在堆内存的java对象内部存储
实例变量是一个对象一份,100个对象有100份
*/
// 学生类
public class Student
{
// 不创建对象,变量的内存空间是不存在的
// 创建完对象之后,对象存储在堆内存中
String name; // String类型的成员变量不赋值默认为null
int age;
int no;
boolean sex;
}
-
java中的构造方法
(1)构造方法综述
package test003;
/**
* 关于java中的构造方法:
* 1、构造方法又被称为构造函数/构造器/Constructor
*
* 2、构造方法语法结构:
* [修饰符列表] 构造方法名(形式参数列表){
* 构造方法体;
* }
*
* 3、普通方法
* [修饰符列表] 返回值类型 方法名(形参列表){
* 方法体;
* }
* 4、对于构造方法来说,返回值类型不需要指定,并且也不能写
* void,只要有void就是普通方法了
*
* 5、对于构造方法来说,构造方法的方法名必须和类名保持一致
*
* 6、构造方法的作用:
* 构造方法存在的意义是通过构造方法的调用,可以创建对象
*
* 7、构造方法怎么调用?
* -- 普通方法调用:修饰符有static时候,类名.方法名;
* 没有static时候,引用.方法名
* -- 构造方法:new 构造方法名(实参列表)
*
* 8、构造方法的返回值:
* 每一个构造方法实际上执行结束之后都有返回值,但是这个"return 值";这样的语句不需要写。
* 构造方法结束的时候Java程序自动返回值。
* 并且返回值类型是构造方法所在类的类型。由于构造方法的返回值类型就是类本身,所以返回值类型不需要写。
*
* 9、当一个类中没有任何构造方法的话,系统会默认产生一个无参数的构造方法,这个构造方法被称为缺省构造器。
*
* 10、建议开发中手动为当前类提供无参数构造方法
*
* 11、构造方法支持重载机制,在一个类当中编写多个构造方法。
*
* 12、构造方法不能使用
*/
public class ConstructorTest01 {
public static void main(String[] args) {
// 创建User对象;
// 只要构造方法调用,就会创建对象,以下创建两个对象,在堆内存中
User u = new User(3);
new User();
new User("hello");
// 带有static的方法有两种调用形式
u.doSome();
User.doSome();
// 不带static的方法要使用引用.方法,名调用
u.doOther();
}
(2)、构造方法的作用
package test003;
/**
* 构造方法的作用:
* 1、创建对象
* 2、创建对象的同时,初始化实例变量的内存空间
*
* 成员变量之实例变量,属于对象级别的变量,这种变量必须现有对象才能有实例变量。
* 实例变量的内存空间是在构造方法的执行过程中完成开辟的
* 系统在默认赋值的时候,也是在构造方法执行过程中完成赋值的。
*
* 实例变量是存储在JVM的堆内存内部
* */
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() {
// 初始化实例变量的内存空间
// actno = null;
// balance = 0.0
}
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;
/**
* 这是一个User类
* */
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的方法");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)