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内存分区图
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—》自动生成需要封装的代码