1.1环境搭建
1.1.1下载安装JDK
-
官方网站下载JDK (www.sun.com 或者 www.oracle.com)
选择Downloads---JavaSE-----选择接受------下载符合电脑操作相同的版本
-
安装JDK
下一步------------关闭公用JRE,选择安装目录--------------下一步
1.1.2Java环境变量配置
(1)我的电脑----属性----高级配置------环境变量
①系统变量名:JAVA_HOME
变量值:JDK安装目录(如C:\Program Files\Java\jdk1.8.0_92\)
②系统变量名:path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre;
---------------------------使用eclipse工具需要增加以下配置的环境-------------------------
③系统变量名:CLASSPATH --------------这个变量需要新建
变量值:.;%JAVA_HOME%\lib\tools.jar
④系统变量名:path
变量值:eclipse工具要使用的platform-tools;地址
如:E:\android\adt-bundle-windows-x86_64-20140702\sdk\platform-tools;
1.1.3检查搭建结果
运行------cmd
命令:java -version : 检查JDK安装是否成功,查看安装的JDK版本。
javac : JDK环境变量的配置是否成功。
1.1.4 Dos的常用指令
1、记事本写代码运行方法
(1)将.txt后缀名改为.java
(2)打开cmd,用cd找到.java文件所在文件夹
(3)编译 javac 类名.java
(4)编译 javac -d .类名.java 或者 javac -d ./类名.java
(将java类编译到对应的包,前提是该类中第一行有定义包:package com.java;)
-
运行 java 类名
-
清除 cls
-
从一个文件夹转到另一个文件夹 cd ..\要进的文件夹
-
查看内部类编译文件中的final池 javap -c 内部类编译出的class文件名
2、cmd查找文件
cd.. 后退
cd 文件名 前进
D: 打开d盘
D:dir 查看d盘里的内容
1.1.5内存分析
①heap(堆)
放创建出来的对象,即new出来的东西
②stack(栈)
放临时变量,即局部变量
③data segment 静态变量字符串常量
数据段(data segment)通常是指用来存放程序中已初始化的全局变 量的一块内存区域。数据段属于静态内存分配
④code segment 存放代码
代码段,程序要运行,当然要把代码移进内存
◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)
◆堆:存放用new产生的数据
◆静态域:存放在对象中用static定义的静态成员
◆常量池:存放常量
◆非RAM存储:硬盘等永久存储空间
◆Java内存分配中的栈
函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配
栈特点:
Java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,
该内存空间可以立即被另作他用。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。
◆Java内存分配中的堆:
堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动 垃圾回收器来管理。
◆堆与栈的优缺点?
堆优点:可以动态地分配内存 大小,生存期也不必事先告诉编译器,因为它是在运行时动 态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。
堆缺点:由于要在运行时动态 分配内存,存取速度较慢。
栈优点:存取速度比堆要快,仅次于寄存器,栈数据可以共享。
栈缺点:存在栈中的数据大小与生存期必须是 确定的,缺乏灵活性。
◆常量池 (constant pool)
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。
如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期 (new出来的)才能确定的就存储在堆中。
java中基本类型的包装类的大部分都实现了常量池技术,这些类是
Byte,Short,Integer,Long,Character,Boolean,
另外两种浮点数类型的包装类则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负责创建和管理大于127的这些类的对象。
*基本类型:基本类型创建后,赋值是直接赋值在栈中,不会在堆中创建对象引用。
如:int i=2;
char c=’q’;
*引用类型:引用类型创建后,会在堆中生成对象,赋值后,会指向常量区的该值地址
如:String[ ] arr=new String[ ]{“aa”,”bb”,”cc”};
String s=“aa”; //在堆中创建一个对象
String ss=new String[ ]{“aa”}; //在堆中创建两个对象
Int[ ] arr2=new int[ ]{2,1,5,3};
1.3变量
按照作用域分:
(1)成员变量:在类里定义,作用于整个类
(2)局部变量:在方法里定义,只能作用于当前方法体
定义格式: ①修饰符 数据类型 名字;
②修饰符 数据类型 名字=值;
③数据类型 名字;
④数据类型 名字=值;
(数据可以发生改变时用变量)
1.4常量
定义格式: ①修饰符 final 数据类型 名字=值;
②final 数据类型 名字=值;
常量的命名建议用大写字母。(固定的数据,不希望被改变的数据用常量定义)
常量在定义的时候必须给予赋值。
1.5访问权限修饰符
修饰符 | 同一个事物(对象) | 同一个包 | 不同包 | 其他的 |
private | √ | |||
default(默认) | √ | √ | ||
protected | √ | √ | √(仅限子类) | |
public | √ | √ | √ | √ |
类修饰符 | public、不填 abstract、final (互斥,二选一) static可以修饰内部类 |
成员变量修饰符 | 不可用:abstract static、final (可同时出现) public、protected、默认、private |
行为方法修饰符 | static abstract、final (互斥,二选一) public、protected、默认、private |
1.5.1 static 内存位置固定的,静态的
①static修饰的数据表示静态数据,在内存里有固定的位置;
非静态数据,在内存里没有固定的位置。
静态成员是属于类的,区别于个别对象,可以在本类或者其它类调用
②静态属性:
静态变量:无论实例化多少次,只要在一次运行中,静态变量都是累加
非静态变量:每次实例化都会自动恢复为原来的值
③静态方法:
静态方法:只能够去调用静态属性和方法,不能调用直接非静态属性和方法;在静态方法中不可以使用this关键字
非静态方法:可以去调用静态属性和方法,因为静态属性和方法会先被编译再到非静态的被编译(但不能在非静态方法体内创建static静态属性或方法),也可通过this访问静态属性或者方法。
④区别静态成员与非静态成员调用方法
静态成员的调用方法:
(1)类名.静态成员 ( 调用静态属性或者静态方法推荐使用 )
(2)对象名.静态成员 ( 也可以使用,但是不推荐 )
非静态成员的调用方法:
-
对象名.静态成员 ( 非静态成员调用只能用此方法 )
1.5.2 final 不可修改的,不可继承的
①final修饰的类,该类不能被继承
②final修饰的方法,该方法不能被重写,但可以被继承
③final 修饰属性值,该属性不能被修改
1.5.3 abstract 框架的,抽象的