java面向对象(对象初步认识,以及封装)

1.java 的面向对象,java的核心技术
什么是类?
类是一个模板,是一个概念,是一个抽象的结果
-类代表了一类事物
抽象的一个模板是类

什么是对象?
对象是一个实际存在的个体
通过类就可以创建对象
有了对象可以让对象直接写作起来形成系统


{
属性; //通常采用变量的方法来定义
状态;//类进行的动作,是一些方法
}

public class Student
{
//定义在类体之中,方法之外的变量称为“成员变量”
//成员变量没有赋值,系统赋默认初值:
//以下是一些属性
int number;//学号
String name;//姓名

//除了属性还有方法
//方法是描述类的动作



}

String是一个引用数据类型

Java语言中所有类均为引用类型
自己定义的类也是引用数据类型

2.java中堆内存的访问必须通过引用才能进行访问
什么是引用?
引用是一个变量,只不过这个变量保存了另一个java对象的地址

堆内存中的对象只能通过引用才能访问
访问实例变量(对象变量)的方法
//读取数据:引用.变量名
//修改数据:引用.变量名 = 值

new Student(); //这就在堆内存新建了一个Student类的对象

多个类得到使用

//首先创建一个类,地址类
public class Address
{
	String city;
	String street;
}
//在定义一个USR类,里面会加入用到地址类
public class User
{
	int num;
	//name是一个实例变量,实例变量意味着只有创建了对象才能够访问
	//name是一个引用
	String name;
	//addr是一个实例变量
	//addr也是一个引用
	Address addr;//String是sun公司写的类,Address是我们自己写的类,所以用法是相似的
}
//加入一个测试类,对User类进行使用
public class Test
{
	public static void main(String[] args)
	{
	User u= new User();
	u.num = 123;
	u.name = "Jack";//String创建对象时,不必new
	u.addr = new Address();
	u.addr.city = "beijing";//这样就可以访问到城市
}
}

由上也可知道,引用是可以 是个成员变量,也可以是个局部变量

在这里插入图片描述

接着上面的三个类接着往下写 
public static Test
{
	public static void main(String[] args)
	{
		User u = new User();
		Address a = new Address();
		u.addr = a;
		System.out.println(u.addr.city);
		a.city = “成都”;
		System.out.println(u.addr.city)
	}
}

在这里插入图片描述

3.变量分类
局部变量【方法体中声明】
成员变量【方法体外声明】
·实例变量【前边修饰符没有static】
·静态变量【前边修饰符中有static】
静态变量存储在方法区内存中。
4.垃圾回收机制,什么时候会考虑将某个java对象的内存回收
·当堆内存中的java对象称为垃圾数据时候,会被垃圾回收器回收
·什么时候堆内存中的java对象会变成垃圾?
没有更多的引用指向它的时候
这个对象无法被访问,因为访问对象只能通过引用的方式访问
JVM内存分区
JVM内存分区图

4.空指针异常

//编译不会报错,因为符合语法
//运行时会报错
Student s = new Student();
  s.name = "wenhao";
  System.out.println(s.name);
  s = null;
  System.out.println(s.name); //运行后报错

引用指向了空,堆内存的对象被当做垃圾所回收

5.面向的封装性
(1)比如定义一个用户,他的年龄不能够随便被修改,需要引入封装

封装的好处:
1.封装之后,对于事物来说,看不到这个事物比较复杂的一面,对外提供简单的操作入口。
2.封装之后才会形成真正的“对象”,形成真正的“独立体”。
3.先谈封装,才能谈到后面的继承与多态
4.封装之后,提高了安全级别

(2)对于封装

a.将所想要封装的属性私有,加入关键词private

private int age;

b.将属性封装后,则不能直接访问,只能通过本类中访问,那么,对于访问该属性,有两点需求
(1).改变该属性的值[set](2).获取该属性的值[get]

//在类体中
public int getage();
public void setage();

对于封装之后的属性,必须配两个方法,setter和getter
在setter和getter两个函数利直接加上限定的过滤网,来保证安全

定义了私有类型
右键–》source—>setter and getter—》自动生成需要封装的代码

发布了28 篇原创文章 · 获赞 0 · 访问量 446

猜你喜欢

转载自blog.csdn.net/wenshao007/article/details/103656474
今日推荐