在这个帖子里我整理了来黑马这段时间自己的学习笔记以及自己认为比较重要的内容和易犯的错误,希望能够和各位同学互相交流,大家共同进步.
第一块内容主要关于java语言的相关常识和学习java语法之前的准备:
1,java重要版本变化(稍作了解):
(1).java在1.2版本时正式分为三个平台:
javase(基础),javame(嵌入式开发),JavaEE(企业级应用).
(2).java1.5的时候,更新为5.0,以后依次为6.0,7.0...
java两个重要特性:开源 ,跨平台(理解)
2,dos命令(简单记忆,以后学习Linux要用):
打开dos窗口: win + r + cmd
常用操作:
d(e,f..):切换盘符
dir: 显示文件夹
cd 目录 进入该目录
cd.. 返回上一级目录
cd/ 返回根目录
cls 清屏
exit 退出
3,JVM JRE JDK(理解各自的作用和关系)
JVM(Java Virtual Machine) :JAVA虚拟机 由JVM来负责Java程序在该系统中的运行。
JRE:(Java SE Runtime Environment):JVM+类库。
JDK:(Java Development kits)Java开发工具包,JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
验证安装是否成功:
a:通过DOS命令,切换到JDK安装的bin目录下。
例如: D:\develop\Java\jdk1.7.0_72\bin
b:然后分别输入javac和java,如果正常显示一些内容,说明安装成功
4,环境变量的配置(必会)
目的:为了在任意盘符,任意文件去使用javac,java这样的应用程序
(1)新建系统变量JAVA_HOME
(2)将JAVA_HOME配置到Path中,配置方法:%JAVA_HOME%\bin;
5,eclipse的安装与使用:
(1)安装使用之前必须配置好对应位数的JDK
(2)选择工作空间
(3)新建项目---建包---创建类---编写代码
(4)常用快捷键及设置请查阅查阅配置文档
第二块内容进入到Java语法的学习(属于每天都要用的内容,必须全部掌握)
1,代码注释:
单行注释: // 注释 ctrl+/
多行注释: /* 注释内容 */ ctrl + shift +/ 取消ctrl + shift +\
文档注释: /** 文档注释*/ //以后学习
2,标识符
组成:数字,字母,_和$
注意:
不能以数字开头,不能和关键词相同
起名规则(约定俗成,必须遵守):
包名: 公司的域名反写 + 包的功能
例如: com.Itheima.study
类名和接口: 首字母大写多个单词的,后续的单词每个首字母都大写:
StudentTest Demo
方法名,变量名:首字母小写,如果包含多个单词的,后续的单词每个首字母都大写
get getSum
常量名: 所有字母都大写,如果包含多个单词的,单词之间用_隔开
JAVA_HOME CONSTANT
3,常量和变量:
常量:运行过程中 其值不会发生改变的量就是常量
变量:运行过程中 值可以发生改变的量
定义格式: 数据类型 变量名 = 初始化值;
注意:
1:局部变量使用之前必须先赋值;
2:变量作用范围 只在当前{}
3: 在同一个范围内 不能重复定义相同名字的变量
定义时时注意float类型,long类型
float a = 2.5F,long b = 12L;
4, 数据类型(四类八种)
每天都用,只列出需要特别记忆的内容
byte 1个字节 -128 ~ 127
整型 默认类型是int
浮点型默认类型是double
char类型默认是null
boolean类型默认是false
数据类型转换
1,隐式转换:从小到大自动提升,根据以下规则
byte < short < int < long <float < double
2,强制转换: 由大到小需加上强制转换符,例如:
int a = 10;int b = 20;
short c = (short)(a+b);
5,运算符
算数运算符:+ - * / % ++ --
注意:
/ 整数相除 得整数 要想结果得到小数 必须有小数参加运算
% :取余数 %运算符结果的符号只和左边有关系,与右边无关
赋值运算符:= += -= *= ...
关系运算符:== != > < (运算结果都是boolean类型)
注意:
"=="绝对不可以写成"="
逻辑运算符:参与逻辑运算符的量 都必须是 Boolean类型的, 结果也都是Boolean类型的
& :与 有假则假
| : 或 有真则真
^ :异 同假异真
! : 非 非真则假
&&:和&执行结果一样, && 效率高。 true && false ,当左侧是false的时候 右边不再看
||:类似
三元运算符:a>b?a:b; 符合条件取a,否则取b
6,键盘录入及获取随机数:
Scanner 键盘录入:
1:第一步:导包 ctrl + shift + o
在类的上面写 import java.util.Scanner;
2:第二步: 创建Scanner对象
Scanner sc = new Scanner(System.in);
3: 第三步: 对象调nextInt()方法
int a = sc.nextInt();
Random 随机数:
导包:import java.util.Random;
创建对象: Random r = new Random();
获取随机数: int a = r.nextInt(10);
7,选择结构语句的格式
if:
if(关系表达式){ //用于控制条件,满足则进行某种操作
语句体;
}
if(关系表达式){
语句体一;
}else{
语句体二;
}
if(关系表达式1){
语句体一;
}else if(关系表达式2){
语句体二;
}else if(关系表达式3){
语句体3;
}else{
语句体n;
}
switch:
switch(表达式){ // default无论放在switch的任何的位置, 都是先去看case 最后才去看default
case 值1:
语句;
break;
case 值2:
语句;
break;
case 值3:
语句;
break;
default:
语句;
break;
}
8,循环结构语句(定义格式):(掌握循环求和,计数思想, for与if的嵌套)
for循环:
for(初始化语句;判断条件语句;控制条件语句){
循环体;
}
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:终止本次循环,继续下次循环。
9,数组
动态初始化:
int[ ] arr = new int[3];
初始化:,默认值:
整型的: 0
浮点型:0.0
布尔型:false
字符型:空字符 '\u0000'
静态初始化:
boolean[ ] arr = {true,true,true};
注意: 不可以"动静结合"
10,方法(函数) :
方法的定义格式
修饰符 返回值类型 方法名 (参数类型 参数名, 参数类型 参数名2,....){
方法体;
return 返回值;
}
注意事项:
方法绝对不能嵌套;
方法不调用就不会执行。
方法作用是为了提高程序的复用性
方法的调用:
有返回值的方法,可以输出调用,也可以赋值调用, 虽然可以单独调用,但是单独调用没有意义。
方法的重载:
当一个类中, 出现方法名相同,参数列表不同,返回值无关,我们称这两个方法之间相互重载。
特点:
方法名必须相同
参数列表必须不同
与返回值无关
基本类型的参数传递
形式参数的改变不影响实际参数; 原因是因为 基本类型的数是存在栈内存中。
引用类型的参数传递
形式参数的改变会影响实际参数, 原因是因为,引用类型的数据存在堆内存中,可以有很多个引用执行的,很多个引用共享他。
11,面向对象(非常重要,必须掌握)
成员变量和局部变量的区别:
写的位置不同:
成员变量:类中 方法外
局部变量: 方法内
内存位置不同:
成员变量: 堆
局部变量: 栈
声明周期:
成员变量:随着对象的创建而存在 随着对象的消失而消失
局部变量:随着方法的调用而存在 随着方法的调用完毕而消失
初始化:
成员变量:有默认初始化
局部变量:没有默认初始化 : 所以使用之前必须先赋值。
private: 修饰成员变量
被private修饰的成员, 只能在本类中访问 ,之外的任何地方不能直接访问
封装:
把不需要对外展示的内容 隐藏起来,并对外提供公共的访问方式。
比如面向对象: 成员变量加private 提供公共的set和get方法。
this关键字:
代表的是当前类的当前对象
构造方法:
1:创建对象的时候 就肯定会调用构造方法;
2:如果我们在一个类中没有给出任何构造方法, 系统会提供一个默认的 无参构造。
3:如果我们提供了任何构造方法,系统就不会再听默认的无参构造方法了
4:一个类中可以有多个构造方法,只要参数列表不同即可,也就是构造方法可以重载。
12,最后写一写关于不死神兔(斐波那契额数列)问题的一些方法:
斐波那契数列指的是:1、1、2、3、5、8、13、21....
(从第三个数开始每个数是前两个数之和)
1、打印第1个至第20个的斐波那契数(2个变量)
public static void main(String[] args) {
int a = 1;
int b = 1;
for(int n = 1;n<=10;n++){
System.out.print(a);
System.out.print(a);
a = a+b;
b = a+b;
}
}
2、打印1-100之间的斐波那契数(3个变量)
public static void main(String[] args) {
int a = 1;
int b = 1;
int c = a+b;
System.out.println(a);
System.out.println(b);
while(c <= 100){
System.out.println(c);
a=b;
b=c;
c=a+b;
}
}
3,利用数组求第二十个斐波那契数
public static void main(String[] args) {
int arr[] = new int[20];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr = arr[i - 1] + arr[i - 2];
}
System.out.println(arr[19]);
}
拓展:
利用递归的思想求第二十个斐波那契数(以后会学,有兴趣的同学可以先研究一下)
public static void main(String[] args){
int n = 10;
System.out.println("第"+n+"个月兔子总数为"+fun(n));
}
private static int fun(int n){
if(n==1 || n==2)
return 1;
else
return fun(n-1)+fun(n-2); //递归调用
}
还有其它方法欢迎同学们一起交流分享.
未完待续..... |
|