jdk和jre 和jvm
我们程序必须要有jvm才能运行
jre里面就有核心类库 也有jvm
jdk包含一些开发工具 也包含jre
jdk> jre >jvm
开发人员 jdk
客户人员 jre
标识符:
标识符:起名字 / 除了关键字的单词 全部都是标识符;
标识符可以自己定义:
规则:
组成 数字 字母 _ $
注意:
不能以数字开头
不能是关键字
约定俗成的习惯:
类名,接口名: 首字母大写,如果包含多个单词的,后续的单词每个首字母都大写
HelloWorld Student StudentTest
方法名,变量名:首字母小写,如果包含多个单词的,后续的单词每个首字母都大写
get getSum price applePrice
常量名: 所有字母都大写,如果包含多个单词的,单词之间用_隔开
JAVA_HOME
常量和变量:
常量:运行过程中 其值不会发生改变的量就是常量
变量:运行过程中 值可以发生改变的量
定义格式: 数据类型 变量名 = 初始化值;
计算机中的存储:
最小的信息单元:bit
最小的存储单元:byte = 8个bit位
为什么要有数据类型呢:
java是强类型语言:规定了每种数据的类型
有好处:节约空间 内存
也有的语言是弱类型语言: 不算什么数据就一种类型
byte < short < int < long <float < double
数据的类型转换:
隐式转换:从小 自动就能提升为大的类型
byte < short,char < int < long <float < double
eclipse的设置:
行号: 左侧右键 show lineNumbers
字体: windows preferance 搜索font
窗口乱了: Windows reset
控制台消失了:Windows show view concle
快捷键:
main + alt + /
syso + alt + /
ctrl + /
ctrl + shift + /
ctrl + shift +\
ctrl + shift + f
逻辑运算符:
& : 和 真和假 有假则假
| : 或 真或假 有真则真
^ : 异(是否不同) 是不同 真, 是相同 假,
! : 非 取反 非真则假 非假则真
参与逻辑运算符的量 都必须是 Boolean类型的, 结果也都是Boolean类型的
&&:和&执行结果一样, && 效率高。 true && false ,当左侧是false的时候 右边不再看
||:
键盘录入:
1:第一步:导包
在类的上面写 import java.util.Scanner;
2:第二步: 创建Scanner对象
Scanner sc = new Scanner(System.in);
3: 第三步: 对象调nextInt()方法
int a = sc.nextInt();
if:
if的第一种格式
if(关系表达式){
语句体;
}
if的第二种格式
if(关系表达式){
语句体一;
}else{
语句体二;
}
if的第三种格式
if(关系表达式1){
语句体一;
}else if(关系表达式2){
语句体二;
}else if(关系表达式3){
语句体3;
}else{
语句体n;
}
switch:
switch(表达式){ // byte short int char jdk1.5之后枚举 jdk1.7版本String
case 值1:
语句;
break;
case 值2:
语句;
break;
case 值3:
语句;
break;
default:
语句;
break;
}
for循环:
for(初始化语句;判断条件语句;控制条件语句){
循环体;
}
for循环可以和if嵌套
while循环
初始化语句;
while(循环判断条件){
循环体;
控制条件语句;
}
do while循环:
初始化语句;
do{
循环体;
控制条件语句;
}while(循环条件);
三种循环的区别:
dowhile 和 for 和while的区别:
dowhile,先执行后判断的,所以肯定会执行一次循环体。
for和while 第一次判断是false话 不会再执行循环体
for和while有什么区别:
for循环的初始化变量一般都定义在for循环的里面。所以for循环结束之后 变量释放了 就不能再用了
while循环的初始化变量都是定义在while循环的外面,所以while循环结束后 还是能继续使用。
控制循环的语句break和continue:
break:的作用就是强制中断循环。
注意事项:break只能写在循环中和switch结构中。
continue:终止本次循环,继续下次循环。
switch的注意事项:
1:default无论放在switch的任何的位置, 都是先去看case 最后才去看default
2:如果执行了一个case之后,里面没有遇到break, 直接case穿透(直接执行下一个case里面的内容,直到遇到break为止,或者到最后一个})
Random 随机数
导包:import java.util.Random;
创建对象: Random r = new Random();
获取随机数: int a = r.nextInt(10);
数组
数据类型:
基本类型
整型
byte
short
int
long
浮点型
float
double
布尔型
boolean
字符型
char
引用类型
类
接口
枚举
数组
数组的定义:
三个容器:
变量 只能存一个
数组是一个容器,存很多,但是固定长度
集合是一个容器,存很多,长度不固定。
初始化:
可以分为动态初始化与静态初始化
方法(函数):
方法的定义格式
修饰符 返回值类型 方法名 (参数类型 参数名, 参数类型 参数名2,....){
方法体;
return 返回值;
}
注意事项:
方法绝对不能嵌套;
方法不调用就不会执行。
方法作用是为了提高程序的复用性
方法的调用:
有返回值的方法,可以输出调用,也可以赋值调用, 虽然可以单独调用,但是单独调用没有意义。
void方法的使用:
当一个方法执行之后,不需要让这个方法返回一个值。 这时候 就需要让方法的返回值类型 写void
注意:void的方法 里面也可以有return 但是不能在return后写值。
方法的重载
当一个类中, 出现方法名相同,参数列表不同,返回值无关,我们称这两个方法之间相互重载。
方法名必须相同
参数列表必须不同
返回值无关
基本类型的参数传递
形式参数的改变不影响实际参数; 原因是因为 基本类型的数是存在栈内存中。
内存:
栈: 执行方法用的
堆: 存储一些引用型数据的 数组
方法区:存储一些class文件的
本地方法区: 存储一些本地方法的
寄存器:cpu
引用类型的参数传递
形式参数的改变会影响实际参数, 原因是因为,引用类型的数据存在堆内存中,可以有很多个引用执行的,很多个引用共享他。
debug: 断点调试;
f6 是下一步
f5 (执行到调用方法的那一步的时候)是进入方法
debug的操作, 以及操作窗口的用处
事物:
属性:姓名 年龄 性别
行为:能做什么 买电脑 上厕所 学习 吃饭 思考
应该在类当中定义为:
成员变量:
类中 方法外面;
不需要初始化;
成员变量和局部变量的区别:
写的位置不同:
成员变量:类中 方法外
局部变量: 方法内
内存位置不同:
成员变量: 堆
局部变量: 栈
声明周期:
成员变量:随着对象的创建而存在 随着对象的消失而消失
局部变量:随着方法的调用而存在 随着方法的调用完毕而消失
初始化:
成员变量:有默认初始化
局部变量:没有默认初始化 : 所以使用之前必须先赋值。
private: 修饰成员用(一般修饰成员变量)
被private修饰的成员, 只能在本类中访问 ,之外的任何地方不能直接访问
所以一般被private修饰的成员变量, 我们都会提供给外界一个 set 和get方法(这两个方法都是public 外界直接能够访问的)
面向对象:
封装:
继承:
多态:
封装:
把不需要对外展示的内容 隐藏起来,并对外提供公共的访问方式。
比如面向对象: 成员变量加private 提供公共的set和get方法。
好处:安全, 提高代码的复用性
就近原则:
方法内,在使用变量的时候,会先去局部范围找这个变量,有就使用, 如果没有 才去成员位置找这个变量,如果有就使用,如果没有就报错了。
this:
代表的是当前类的当前对象
this说: 谁调用我 我就是谁
构造方法:
1:创建对象的时候 就肯定会调用构造方法;
顾名思义: 为了创建对象而存在的方法
2:如果我们在一个类中没有给出任何构造方法, 系统会提供一个默认的 无参构造。
3:如果我们提供了任何构造方法,系统就不会再听默认的无参构造方法了
4:一个类中可以有多个构造方法,只要参数列表不同即可,也就是构造方法可以重载。
|
|