堆(Heap) :此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
栈(Stack) :是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。
方法区(Method Area) :用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
基础
public class test {
public static void main(String[] args){
System.out.println("hello world");
}
}
关键字
package
java中文件的大小分配:project--> module --> package -->class
这个关键字放置在class的顶部,用于声明这个class属于哪个package
package 顶层包名.子包名 ;
JDK中主要的包介绍:
java.lang ----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能
java.net ----包含执行与网络相关的操作的类和接口。java.io ----包含能提供多种输入/输出功能的类。
java.util ----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text ----包含了一些java格式化相关的类
java.sql ----包含了java进行JDBC数据库编程的相关类/接口
java.awt ----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
import(导入)
为了使用定义在其它包中的Java类,需用import语句来显式引入指定包下所需要的类
- import语句,声明在包的声明和类的声明之间。
- 如果需要导入多个类或接口,那么就并列显式多个import语句即可
- 如果使用a.* 导入结构,表示可以导入a包下的所有的结构。举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。
- 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
- 如果已经导入java.a包下的类,那么如果需要使用a包的子包下的类的话,仍然需要导入。
- 如果在代码中使用不同包下的同名的类,那么就需要使用类的全类名的方式指明调用的是哪个类。
- (了解) import static 组合的使用:调用指定类或接口下的静态的属性或方法
数据类型
数据类型 变量名=值
数据类型:
声明long时需要在最后加L或l,float要加f或F
long a=100000L
float b = 0.2f
类型转换--自动类型提升(小->大)
1、byte->short->int->long->float->double,按照表示数字的范围排序,小的可以转换为大的。例如 下面这种是合理的,但是反过来不行
byte a = 2; int c ;c = a //ok
byte a ; int c=2 ;a = c //no
2、在运算中,会符合运输数中最 大 的那个数据类型:
double a=7;int b=3;int c = a+b; //no
long a=7;int b=3;double c = a+b; //ok
3、byte,short,char做运算,结果都为int(从char到int会转换为字符的ascll码)
byte a=1;short b=3; short c=a+b//no,a+b的结果已经转换为了int
4、下面这个,123是int类型,转换为了long,所以不写123L也不会报错
long a = 123
5、未定义的数字,整数默认为int,小数默认为double
类型转换--强制转换(大->小)
int a = (int) 123.22;
System.out.println(a); //123
字符串
String a = "i love you";
int b =3;
short c = 4;
boolean d = false;
String e = c+b+a+d;
System.out.println(a); //i love you
System.out.println(a+b); //i love you3
System.out.println(e); //7i love youfalse
强转数据类型不可行
String a = "10";
int b =(int) a;//no
运算符
++ ,--不改变数据的类型
short a = 1;short b=++a;//合理,不等价于 short a = 1;short b=a+1(无法运行);
同理,赋值运算符也不改变数据的类型