个人学习java的一些总结,都在下面代码的注释中
Main.java
import object.ObjTest;
/**
* 开启java学习之旅
* @author
* @version 1.0
*/
public class Main {
/**
* 整个程序的入口
* @param args 命令行参数
*/
public static void main(String[] args) {
/*
* java程序是由对象组成的,对象有特性、行为和标识三个特征
*
* 每个对象都有一个类型,而这个类型既可以是java库内的,也可以是自定义的,而且大多数都需要程序员自定义
* 这个类型就叫做类,类定义了如何去访问对象/发送请求
* 类就定义了对象的三个特征,特性是成员属性,行为是方法,标识就是类名
*
* java编程解决问题,也就是将要解决的问题内的某些方面抽象为一个个对象,并且根据自己的经验和对问题的分析
* 再加上一些其他的辅助解决问题的类,可以这样想:谁能解决这个问题?它能够提供什么样的方法?它和别人有什么关系?
*
* 因此,对于一个问题而言,程序员定义的类内的所有成员属性和方法,并不一定希望都被其他的对象访问
* 比如说综艺节目排名,他只希望你看到最终排名,但并不希望你看到他们是怎么决定排名的(手动狗头保命)
*
* 那么,就出现了访问控制:private类内可见,protected继承可见,public公共可见还有默认的包内可见
*
* 归根到底,程序要在计算机上跑,而所有的东西都需要在计算机上有存储位置,java程序有五个位置:
* 1.寄存器:最快,但是无法控制
* 2.堆栈:第二快,存储某些数据,尤其是对象的引用(是引用而不是对象本身),java特殊类型(在C中叫基本类型)
* 3.堆:比较慢,存储对象本身
* 4.常量存储:存储代码和常量
* 5.非RAM存储:流对象和持久化存储,流对象可以发送到其他机器,持久化对象存储在硬盘
* JDBC等会提供更复杂的持久化对象
*
* java的特殊类型:char 16bits, byte 8bits, int 32bits, short 16bits, long 64bits, float 32bits
* double 64bits, boolean和void没有具体大小
*
* 堆栈上的数据存在在堆栈上,系统根据作用域自行创建和删除
* 而堆上存在的是对象的“值”,这些对象是由java的垃圾处理机制进行监督和清楚
* 当程序对于堆内对象的唯一引用删除之后,垃圾处理机就会自动清除
*
* System是java.lang包里的一个类,而out是该类的一个成员
* out对象的类型是PrintStream类,println是out对象的一个成员方法
*
* 而java对于对象的使用是必须要使用new关键字,来在堆上动态分配内存空间给对象
* 而本程序并没有创建System的实例,是因为out是System类的static对象
*
* static可以不与任何类产生关联,就能够被使用,即使不创建类的对象
* static成员变量只有一个内存,即使你创建了很多个对象,他们的static成员也只有一个内存域
* 同样,该关键字可以应用于方法上
*/
System.out.println("Hello world!");
// 这里只是声明一个引用,引用并不是对象已经存在了,必须要用new联系一个对象
ObjTest obj;
// 类名加括号是构造方法,可以自己编写,java也会提供默认的构造方法
obj = new ObjTest();
System.out.println("obj可访问的公共变量"+obj.pblMember);
System.out.println("obj通过方法返回的公共变量"+obj.getPriMember());
}
}
ObjTest.java
package object;
/**
* 使用类的成员和方法
* @author
* @version 1.0
*/
public class ObjTest {
/*
* 这里将定义四种类型的变量
* 没有初始化,编译器将定义为0值,而方法中的局部变量则会被定义为没有意义的任何值
*/
public int pblMember;
protected int proMember;
private int priMember;
int pkgMember;
static int statMember;
/**
* 返回私有变量
* @return 未初始化的私有变量的值
*/
public int getPriMember() {
return priMember;
}
}
class ObjT extends ObjTest {
/**
* 返回继承可见的值
* @return 未初始化的继承下来的值
*/
int getProMember() {
return proMember;
}
}