类和对象
类是一个模板,是一个抽象的概念,用来定义数据域是什么以及方法是用来做什么的。例子:“人类”就是一个类,“人类”这个类包含了世界上所有的人所共有的属性(名字、性别等)。
对象就是代表现实世界中可以明确的一个实体,例子:上面说的“人类”是一个类,那么具体的人,如小张、小红就是一个对象(实体)
实现代码:
package shen;
public class people{
String name;
static int age = 18;
private int h = 10;
//构造函数
public people(){
}
public void eat(){
}
}
package shen;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
people xiaozhang = new people();//创建一个实体对象小红
System.out.print("age:"+xiaozhang.age);
}
}
构造犯方法与一般的方法却别:
1、构造方法的名字与所在的类名一样;
2、构造方法没有返回类型且没有关键字void;
3、构造方法是在创建对象使用new操作符调用的,用来初始化对象。
基本类型变量和引用类型变量的区别
基本类型和引用类型的区别就是跟函数传值是一样的,就传值和传引用的,
基本类型就包括int ,double等,那么什么是引用类型呢?我们定义的类就是一个引用类型,如例子“people”,
基本类型:int i = 0;
引用类型:people xiaohong = new...;
怎么来理解二者的区别呢?举个栗子:有两个一模一样的盒子贴了标签A和B,里面分别装了红球和蓝球,那么
基本类型赋值A=B;之后,A、B两个盒子都装了蓝球,
引用类型赋值A=B;之后,把A的标签从盒子上撕下来贴到盒子B上,实际上现在只有一个盒子上贴了AB两个标签。
static关键字和可见性修饰符
1、static关键字
在理解static关键字之前,我们先要了解在java程序在内存中存储分配的情况,首先java程序的内存分配分为3个块,堆区、栈区和方法区。
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
堆区 | 静态区 | 栈区 | |||
---|---|---|---|---|---|
xiaohong xiaoming |
static int age |
|
举个栗子:我定义个一个类“people”如上例,那么我刚刚定义了一个“xiaohong”,现在有定义一个“xiaoming”两个对象,这样一个程序具体的存储如上面框图
像所有的对象仅仅是对象存放在一个堆区
将静态方法和静态变量都存放在静态区
将将各个对象的变量和方法等放在栈区,一个对象各方一个。
总结一下static关键字:如果想将变量值存储在一个公共的内存地址,就要用静态变量,不依赖于具体的对象(实例)从上面的分配图就可以看粗,静态区与实例栈区是分开独立的。
2、修饰符
常用的修饰符有public、protected、private、default。
public 修饰后表明它们可以被任何其他的类访问;
default 修饰后表明可以被同一个包里面的任何类访问;
private 修饰后只能被当前类访问,举个栗子:上面h变量是不能被对象xiaohong点出来的,但是可以在类people中通过this.h点出来。
protected 修饰后可以在同一个包内访问可以在子类访问。