2017 - 10 -14 java基础
2017-10-15 20:19
246 查看
1 java程序为了提高程序的效率,就对数据进行了不同的空间分配。
具体划分为五个内存空间
栈:存放的是局部变量
堆:存放的是所有new出来的东西
方法区:(类的方法,静态等)
本地方法区:(和系统相关)
寄存器:(CPU使用)
局部变量:在方法定义中或者方法声明上的变量都称为局部变量
int[] arr = new int[3]
System.out.println(arr);//地址值
System.out.println(arr[0]);// 0
System.out.println(arr[1]);// 0
System.out.println(arr[2]);// 0
栈 堆
new int[3]
int[] arr <------- 0x0001(地址)
0 0
1 0
2 0
堆内存的特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
byte,short,int,long 0
float,double 0.0
char '\u00000'
boolean false
引用类型 null
C:使用完毕就变成了垃圾,但是并没有立即回收。会在垃圾回收器空闲的时候回收。
栈内存的数据用完就释放掉。例如:
{
int a = 100;
System.out.println(a);
}
2 数组动态初始化和静态初始化
动态:
int[] arr = new int[3];
arr[0] = 1;
静态:
int[] arr = new int[]{1,2,3}
简化后:
int[] arr = {1,2,3}
3 数组操作的两个常见小问题
编译时不报错,运行报错
int[] arr = {1,2,3};
System.out.println(arr[3]);
//(ArrayIndexOutOfBoundsExceptin)数组索引越界异常越界
//原因:访问了不存在的索引
arr = null;
System.out.println(arr[0]);
//(NullPointerException)空指针异常
//原因:数组已经不再指向堆内存了,而你还用数组名去访问元素
作用:请自己把所用的场景Exception结尾的问题总结一下,以后遇到就记录下来。
4 二维数组
A:
int[][] arr = new int[3][4];
arr[1][1] = 100;
B:
int[][] arr = new int[2][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
arr[1][1] = 100;
C:
int[][] arr = {{1,2,3},{4,5},{6}};
5 一个对象的内存图
6 成员变量和局部变量的区别
A:位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化时不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用就近原则。
class Variable{
//成员变量
int num = 10;
//int num; //0
public void show(){
//int num2 = 20;//局部变量
//可能尚未初始化变量num2
//int num2; 没有默认值
int num2 = 20;
System.out.println(num2);
int num = 100;
System.out.println(num); // 100 采用就近原则
}
}
7 匿名对象
就是没有名字的对象
匿名对象的应用场景:
A:调用方法,仅仅只调用一次的时候。
注意:调用多次的时候,不适合。
那么,这种匿名对象调用有什么好处吗?
1.匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。
B:匿名对象可以作为实际参数传递
//带名字的对象
Student s = new Student;
s.show();
s.show();
//匿名对象
//new Student()
//匿名对象调用方法
new Student().show();
new Student().show();// 这里其实是重新创建了一个新的对象
//匿名对象作为实际参数传递
StudentDemo sd = new StudentDemo();
//Student ss = new Student();
//sd.method(ss);//这里的s是一个实际参数
//匿名对象
sd.method(new Student());
//再来一个
new StudentDemo().method(new Student());
8 static
(所以感觉作用两点,成员变量和成员方法)
(成员变量 被对象共享)
(成员方法 即不用建立对象而调用类的方法)
(可以修饰内部类,但主类不能)
(静态方法只能访问静态成员)
(静态方法不能被重写,静态变量是变量不是常量,可以被改变,对所有对象都有影响)
(目前看到的修饰:变量(成员变量和局部变量)、方法、代码块、内部类 )
针对多个对象有共同的这样的成员变量,java提供了static
static的特点:(它可以修饰成员变量,也可以修饰成员方法)
A:随着类的加载而加载
回想main方法。。。
B:优先于对象存在
C:被类的所有对象共享
举例:我们班上的学生应该共用一个班级编号
如果某个成员变量是所有对象共享的没那么它就应该定义为静态的
D:可以通过类名调用
其实它本身也可以通过对象名调用
静态修饰的内容一般我们称其为:与类相关的,类成员
9 main方法的格式讲解
public static void main(String[] args)
public:公共的,访问权限是最大的,由于main方法是被jvm调用,所以权限要够大
static:静态的,不需要创建对象,通过类名就可以,方便jvm的调用
void:因为我们曾经说过,方法的返回值是返回给调用者的,而main方法是被jvm调用,返回给jvm没有意义
main:是一个常见的方法入口,(我)见过的语言都是以main为入口
String[] args:这是一个字符串数组,值去哪里了?
这个东西到底有什么用?怎么给值?
这个东西早起是为了接受键盘录入的数据的
java MainDemo hello world
http://blog.csdn.net/yxmaomao1991/article/details/50507177
具体划分为五个内存空间
栈:存放的是局部变量
堆:存放的是所有new出来的东西
方法区:(类的方法,静态等)
本地方法区:(和系统相关)
寄存器:(CPU使用)
局部变量:在方法定义中或者方法声明上的变量都称为局部变量
int[] arr = new int[3]
System.out.println(arr);//地址值
System.out.println(arr[0]);// 0
System.out.println(arr[1]);// 0
System.out.println(arr[2]);// 0
栈 堆
new int[3]
int[] arr <------- 0x0001(地址)
0 0
1 0
2 0
堆内存的特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
byte,short,int,long 0
float,double 0.0
char '\u00000'
boolean false
引用类型 null
C:使用完毕就变成了垃圾,但是并没有立即回收。会在垃圾回收器空闲的时候回收。
栈内存的数据用完就释放掉。例如:
{
int a = 100;
System.out.println(a);
}
2 数组动态初始化和静态初始化
动态:
int[] arr = new int[3];
arr[0] = 1;
静态:
int[] arr = new int[]{1,2,3}
简化后:
int[] arr = {1,2,3}
3 数组操作的两个常见小问题
编译时不报错,运行报错
int[] arr = {1,2,3};
System.out.println(arr[3]);
//(ArrayIndexOutOfBoundsExceptin)数组索引越界异常越界
//原因:访问了不存在的索引
arr = null;
System.out.println(arr[0]);
//(NullPointerException)空指针异常
//原因:数组已经不再指向堆内存了,而你还用数组名去访问元素
作用:请自己把所用的场景Exception结尾的问题总结一下,以后遇到就记录下来。
4 二维数组
A:
int[][] arr = new int[3][4];
arr[1][1] = 100;
B:
int[][] arr = new int[2][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
arr[1][1] = 100;
C:
int[][] arr = {{1,2,3},{4,5},{6}};
5 一个对象的内存图
6 成员变量和局部变量的区别
A:位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化时不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用就近原则。
class Variable{
//成员变量
int num = 10;
//int num; //0
public void show(){
//int num2 = 20;//局部变量
//可能尚未初始化变量num2
//int num2; 没有默认值
int num2 = 20;
System.out.println(num2);
int num = 100;
System.out.println(num); // 100 采用就近原则
}
}
7 匿名对象
就是没有名字的对象
匿名对象的应用场景:
A:调用方法,仅仅只调用一次的时候。
注意:调用多次的时候,不适合。
那么,这种匿名对象调用有什么好处吗?
1.匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。
B:匿名对象可以作为实际参数传递
//带名字的对象
Student s = new Student;
s.show();
s.show();
//匿名对象
//new Student()
//匿名对象调用方法
new Student().show();
new Student().show();// 这里其实是重新创建了一个新的对象
//匿名对象作为实际参数传递
StudentDemo sd = new StudentDemo();
//Student ss = new Student();
//sd.method(ss);//这里的s是一个实际参数
//匿名对象
sd.method(new Student());
//再来一个
new StudentDemo().method(new Student());
8 static
(所以感觉作用两点,成员变量和成员方法)
(成员变量 被对象共享)
(成员方法 即不用建立对象而调用类的方法)
(可以修饰内部类,但主类不能)
(静态方法只能访问静态成员)
(静态方法不能被重写,静态变量是变量不是常量,可以被改变,对所有对象都有影响)
(目前看到的修饰:变量(成员变量和局部变量)、方法、代码块、内部类 )
针对多个对象有共同的这样的成员变量,java提供了static
static的特点:(它可以修饰成员变量,也可以修饰成员方法)
A:随着类的加载而加载
回想main方法。。。
B:优先于对象存在
C:被类的所有对象共享
举例:我们班上的学生应该共用一个班级编号
如果某个成员变量是所有对象共享的没那么它就应该定义为静态的
D:可以通过类名调用
其实它本身也可以通过对象名调用
静态修饰的内容一般我们称其为:与类相关的,类成员
9 main方法的格式讲解
public static void main(String[] args)
public:公共的,访问权限是最大的,由于main方法是被jvm调用,所以权限要够大
static:静态的,不需要创建对象,通过类名就可以,方便jvm的调用
void:因为我们曾经说过,方法的返回值是返回给调用者的,而main方法是被jvm调用,返回给jvm没有意义
main:是一个常见的方法入口,(我)见过的语言都是以main为入口
String[] args:这是一个字符串数组,值去哪里了?
这个东西到底有什么用?怎么给值?
这个东西早起是为了接受键盘录入的数据的
java MainDemo hello world
http://blog.csdn.net/yxmaomao1991/article/details/50507177
相关文章推荐
- java基础总结14-面向对象10(多态)
- Java基础教程(10)--类
- Java转换Json日期/Date(1487053489965+0800)/格式以及js时间格式 Tue Feb 14 2017 14:06:32 GMT+0800
- Java基础每日10题——第五天
- java基础19(Javaoo14)—— 反射,类加载与垃圾回收
- 【黑马程序员】Java基础加强14:JDK1.5枚举
- 每天五个java相关面试题(10)--java基础详解篇2
- java基础10:抽象类、接口与多态
- JAVA学习【10】JVM基础知识整理
- JAVA基础10 设计模式:结构型模式(适配器 代理模式 桥接模式 享元模式 组合模式 装饰器模式)
- 笔记之java基础--14
- java程序员面试宝典之——Java 基础部分(1~10)
- java基础--14
- 黑马程序员——java基础学习日记(10)
- JAVA企业面试题精选 Java基础 1-10
- [零基础学JAVA]Java SE面向对象部分-14.面向对象高级(02) 推荐
- Java基础学习总结(10)——static关键字
- Java基础(14):网络编程之socket
- 黑马程序员_java基础学习笔记10_多线程
- Java自学之路-Java基础教程-14:Java基本语句之4-条件判断语句switch和case