java学习笔记1_对象和类

时间:2021-11-29 21:46:48

类和对象

类是一个模板,是一个抽象的概念,用来定义数据域是什么以及方法是用来做什么的。例子:“人类”就是一个类,“人类”这个类包含了世界上所有的人所共有的属性(名字、性别等)。

对象就是代表现实世界中可以明确的一个实体,例子:上面说的“人类”是一个类,那么具体的人,如小张、小红就是一个对象(实体)

实现代码:

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










 xiaohong.name
 xiaohong.eat
xiaoming.name
xiaoming.eat
 

举个栗子:我定义个一个类“people”如上例,那么我刚刚定义了一个“xiaohong”,现在有定义一个“xiaoming”两个对象,这样一个程序具体的存储如上面框图

像所有的对象仅仅是对象存放在一个堆区

将静态方法和静态变量都存放在静态区

将将各个对象的变量和方法等放在栈区,一个对象各方一个。

总结一下static关键字:如果想将变量值存储在一个公共的内存地址,就要用静态变量,不依赖于具体的对象(实例)从上面的分配图就可以看粗,静态区与实例栈区是分开独立的

2、修饰符

常用的修饰符有public、protected、private、default。

public 修饰后表明它们可以被任何其他的类访问;

default 修饰后表明可以被同一个包里面的任何类访问;

private 修饰后只能被当前类访问,举个栗子:上面h变量是不能被对象xiaohong点出来的,但是可以在类people中通过this.h点出来。

protected 修饰后可以在同一个包内访问可以在子类访问。

   private:修饰完全隐藏类的成员,这样,就不能从类的外边直接访问他们,我们提供set和get方法,保证类中数据域的安全。

default:指默认修饰符,什么都不加,实际上它限制的范围就是一个包内可以访问。如果不在一个包内,即使继承关系任然是不能访问的。

protected:经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许任何包中的子类访问父类。

public:不用多说