闲聊一下Java类
- 什么是对象
- 我们写的Class
- JVM内存分配
- main
- 成员变量和方法
- 方法
- this
- 访问修饰符
- 静态static
- 常量
什么是对象
什么是对象?
对象(Object)是一个应用系统中的用来描述客观事物的实体,是有特定属性和行为(方法)的基本运行单位。是类的一个特殊状态下的实例。对象可以是一个实体、一个名词、一个可以想象为有自己标识的任何东西,可以概括来说:万物皆对象。
什么是类?
类(Class)是Java代码的基本组织模块,使用来描述一组具有共同属性和行为对象的基本原型。是对这组对象的概括、归纳和描述表达。类是对象的模板,它定义了本类对象的所拥有的属性集和行为集,是对一组具有相同属性和相同方法的对象的定义。
类与方法的关系?
类和对象之间是抽象与具体的关系。类是一个模板是对一类事物的抽象描述,而对象用于表示现实中该事物的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类必须通过对象才可以使用,而对象中的属性和行为必须在类中定义。
原文链接: 原文链接
我们写的Class
java必学Spring,在使用Spring过程中创建定义对象变的简简单单。但是我们还是有必要深入了解一下我们的对象的,这样可以和面试官对答如流,也可以让你撸的更快乐
@RestController
@RequestMapping("test")
public class Controller {
private String controllerName = "test";
@Autowired
private TestController testController;
@RequestMapping("get")
public String get(){
return controllerName;
}
}
JVM内存分配
面试官:java对象的内存分配?
作为一个java程序员,内存分配还是要懂一点的比如
重点记一下 方法区,堆,和虚拟机栈
main
public class Main {
private String test1 = "daxian";
static{
System.out.println("静态被加载了");
}
{
System.out.println("普通被加载了"+test1);
}
//作为我们程序的入口之一
//每个类对象都可以实现这个main方法作为程序的主入口
public static void main(String[] args) {
System.out.println("main方法开始");
Main main = new Main();
}
}
所以在静态被加载时会加载当前类的static修饰的代码
成员变量和方法
public class Main {
//这个叫属性,也叫成员变量
private String name;
private int age;
//这玩意叫方法,类似于其他语言的函数
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
System.out.println("main方法开始");
Main main = new Main();
}
}
方法
好我要开始了
//**先跑这个**
public static void main(String[] args) {
new Student;
}
class Student{
public Student(){
new User();
}
}
class User{
public User(){
new Student();
}
}
//Exception in thread "main" java.lang.StackOverflowError
/*
看一下这个异常,翻译过来就是栈内存溢出,那么main方法导致了栈内存异出
意思就是,我们的方法是被放到栈中进行运行,由于俩个对象重复创建导致栈过大
抛出了栈内存溢出异常,所以我们的方法是被放到栈中运行的
*/
一个方法就是一个栈帧
一个栈帧中有一个局部变量表存放局部变量
基本数据类型可以存在于栈中
像我们创建一个对象 就是 reference类型
Person person = new Person();在java程序运行时其实是
Person person = @堆内存地址;
但是方法存在于Class对象也就是方法区所以要先找到堆中对象才能执行我们实例化对象的方法
this
public class Main {
private String name;
private int age;
public void setName(String name) {
//this是什么,this默认是一局部变量表的第0个值
//this表示当前实例对象
//static方法中不能有this因为static方法初始化时对象并没有创建
this.name = name;
}
访问修饰符
先偷一张图
红色代表不能访问
public class Main {
private String test1;
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.test1);
}
}
那么问题来了这个代码会报错吗?
静态static
静态的成员对象或者变量就不会存在于堆内存中了,他直接存放在元空间(方法区)
所以我们可以直接使用Class类名 点 方法名(变量名)调用
常量
修饰方法,对象,属性
修饰方法表示 继承后 不能重写该方法
修饰对象表示对象不能被继承
修饰属性表示属性不能被修改