第一部分、环境搭建 DOS命令、Java语言特点、JDK、JRE、path、classpath、注释
第二部分、基础语法
一、运算符 二、流程控制 三、for循环
四、函数 五、数组 六、内存
第一部分、环境搭建
一.常用Doc命令
dir:列出目录
md:创建目录
rd:删除目录
cd:进入目录
cd..:退回上一级目录
cd/:退回根目录
del:删除文件
exit:退出doc
二.Java语言的跨平台性
平台:指操作系统
为什么可以跨平台?
:java有自己的语言解释器--------java虚拟机
三.Java环境搭建
1.运行环境jre:java Runtime Envirenment
2.开发环境jdk:java development kit
jdk>jre >jvm
下载:
java.sun.com
www.orical.com
安装:
独立的jre可装可不装;
目录可以装在移动硬盘中,便携,少了注册表的信息,不能更新而已。
dos:
可在jdk的安装目录下,使用java工具(bin);
可若想 在其他目录下使用bin,就得告诉系统自己的路径,所以要配置环境变量。
path
系统环境变量的配置:把bin路径复制过去,后面加分号;
最后在任意目录测试下,有效则配置ok。
四、环境变量配置的一个技巧:
如果想修改目录或者文件夹名称,那么配置应该路径动态生成,新建一个变量:
JAVA_HOME=E:\jdk\
% JAVA_HOME %\bin;
配置路径前置后置均可,前置系统查找快。
五、环境变量的临时配置:
set 命令添加变量,只在本命令行窗口有效,有一特例,就是start启动的窗口。
六 、Helloword
.java文件名可与类名不一致,一致更方便。
加public,必须一致
七、classpath的配置
同样的道理,可以配置成一劳永逸的,也可以配置成临时的。 ‘.’表示当前路径,多路径配置之间用’;’隔开,结束处不加分号为好。 jvm会先找classpath在找当前目录,这一点与path相反。
执行文件的总结:
Java执行文件,找classpath
非Java执行文件,找path.如qq.exe
八.主函数
由jvm调用,独立运行,是程序的入口
九、注释
有三种形式
1.单行://
2.多行/* */
3.文档/** */
作用:
解释说明
调试
养成一种良好的书写习惯:
1, 首先写注释,其中写明需求,思路和步骤;
2, 然后,开始写代码。
第二部分、基础语法
一、运算符
1、&和&&的特点
&:无论左边是true是false。右边都运算。
&&:当左边为false时,右边不运算。
|:两边都参与运算。
||:当左边为true。右边不运算。
2、负数的表示
对应二进制正数取反加一。
3、异或
左右数相同为假,不同为真。
规律:一个数与另一个数连续异或两次,得到自己。应用:加密,换位。
两数换位的三种写法:
//两整数交换数值
int m=1;
int n=9;
//第一种:
//适用于编程
/*
int temp=m;
m=n;
n=temp;
*/
//第二种:
//这种方法有损失精度的危险
/*
m=m+n-m;
n=m+n-n;
*/
//第三种:
//技巧型,不易想到
/*
m=m^n;
n=m^n;//m^n^n=m
m=m^n;//m^m^n=n
*/
System.out.println("m="+m+",n="+n);
4、转义字符
通过\来转变后面字母或者符号的含义。
\n:换行。
\b:退格。相当于backspace。
\r:按下回车键。window系统,回车符是由两个字符来表示\r\n.
\t:制表符。相当于tab键。
练习
如何获得一个2进制数?用程序怎么实现?
: 比如4位的取,先&15,再>>>4,取得下4位
0000-0000 0000-0000 0000-0000 0000-0110
0000-0000 0000-0000 0000-0000 0000-1111 =>1111
5、三元运算符:
可以简化代码,但功能也有局限,它有返回结果。
二、流程控制
1、if…else
if..else的简写
if..else与三元运算符的区别
if..else是一个单条语句
技巧:
用if排掉一个范围,else就能起到意想不到的妙用
代码演示:
/*
需求:得到一个2进制数
*/
import java.util.*;
class Basic
{
<span style="white-space:pre"> </span>public static void main(String[] args)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>/*
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>System.out.println("请输入一个整数:");
<span style="white-space:pre"> </span>Scanner sc = new Scanner(System.in);//扫描键盘的输入
<span style="white-space:pre"> </span>int num = sc.nextInt();
<span style="white-space:pre"> </span>int tempt=num&15;//该低位数应该是与十六进制对应的数,所以 若超过10需要转
<span style="white-space:pre"> </span>if(temp>=10){
<span style="white-space:pre"> </span>char c=(char)(temp-10+'a');
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>char c=(char)(temp);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println(c);
<span style="white-space:pre"> </span>*/
<span style="white-space:pre"> </span>int num=60;
<span style="white-space:pre"> </span>//16进制
<span style="white-space:pre"> </span>int n1 = num&15;
<span style="white-space:pre"> </span>int c=(n1>9)?(char)(n1-10+'a'):n1;
<span style="white-space:pre"> </span>//8进制
<span style="white-space:pre"> </span>//int temp = num&7;
<span style="white-space:pre"> </span>//System.out.println(c);
<span style="white-space:pre"> </span>//需求一:输出星期
<span style="white-space:pre"> </span>//需求二:力求简洁的写法
<span style="white-space:pre"> </span>int x=4;
/*
<span style="white-space:pre"> </span>if(x==3 || x==4 || x==5)
<span style="white-space:pre"> </span>System.out.print(x+"春");
<span style="white-space:pre"> </span>else if(x==6 || x==7 || x==8)
<span style="white-space:pre"> </span>System.out.print(x+"夏");
<span style="white-space:pre"> </span>else if(x==9 || x==10 || x==11)
<span style="white-space:pre"> </span>System.out.print(x+"秋");
<span style="white-space:pre"> </span>else if(x==12 || x==1 || x==2)
<span style="white-space:pre"> </span>System.out.print(x+"冬");
<span style="white-space:pre"> </span>else{
<span style="white-space:pre"> </span>System.out.print("输入有误");
<span style="white-space:pre"> </span>}
*/
<span style="white-space:pre"> </span>if(x>12 &&x<1)
<span style="white-space:pre"> </span>System.out.print("输入有误");
<span style="white-space:pre"> </span>else if(x>=3 && x<=5)
<span style="white-space:pre"> </span>System.out.print(x+"春");
<span style="white-space:pre"> </span>else if(x>=6 && x<=8)
<span style="white-space:pre"> </span>System.out.print(x+"夏");
<span style="white-space:pre"> </span>else if(x>=9 && x<=11)
<span style="white-space:pre"> </span>System.out.print(x+"秋");
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>System.out.print(x+"冬");
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
}
2、switch语句
进行判断,遇到break或者‘}’结束
因为按顺序执行,所以case没有前后之分
default亦不分前后,反正最后执行
有没有break,影响很大,尤其是在default语句移动的情况下
3、switch语句的分析
a.对数值进行判断,类型包括byte,short,int ,char四种
b.适用于简单的数值判断,少,效率高
c.后续版本有所增强
4、while与do..while
无论如何,do..while会先执行一次
三、for循环
for(初始化表达式;条件表达式;操作后的循环表达式){}
:因为是三个表达式,所以可以灵活书写
最简单的无限循环:
for(;;){}
while(true){}
1、两种编程的小思想
累加
计数器
2、嵌套循环----大圈套小圈
注意对区间的理解,它由初始值和条件范围构成,也就是说可以通过这两个方面去控制它
3.Break,continue
两者单独使用,后面内容执行不到
break:跳出循环 作用范围:loop,switch
continue:结束本次循环,进入下一次循环 作用范围:loop
给循环体加标号:格式name+”:”
四、函数
定义函数的思想:尽可能只实现一个功能
考虑:返回结果,是否需要外部数据,实现什么功能
再次思考:三元运算符返回值
表达式返回值
函数重载(overload)
同类同名,参数列表不同,与返回类型没关系
参数列表:参数个数和类型
实现了重载后,为了提高代码的复用性,可以互相调用
五、数组
数据分为基本类型和引用类型两大类。基本类型为8种。引用类型有3大类,数组是三大应用类型之一。
1、数组常见问题
先说下,编译时 检查语法错误;运行时报异常
数组在运行时,常见错误:nullpointereception,arrayindexoutofboundsexception
数组的赋值:int[]arr=new int[3];
int[] arr=new int[]{1,2,3}定义并指定内容
int[]arr={1,2,3}简写
由上述三种可知,数组在明确知道长度时可用。
2、数组的运用
遍历
求最值
排序
选择:依次比较, 最小值往前排, 每一轮得到一个最小值
冒泡:相邻比较, 最大值往后排,每一轮得到一个最大值
//选择排序
public static void selectSort(int[] arr){
for(int m=0;m<arr.length-1;m++){
for(int n=m+1;n<arr.length;n++){
if(arr[m]>arr[n]){
int temp=arr[m];
arr[m]=arr[n];
arr[n]=temp;
}
}
}
}
//冒泡排序
public static void bubbleSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)//比几轮
{
for(int y=0;y<arr.length-x-1;y++)//每轮比多少次
{
if(arr[y]>arr[y+1])
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
注意:
在数组的排序中,要注意角标越界的问题
在数组的排序中,要注意逻辑问题:多少轮 ,每轮多少次
排序中最快的希尔排序,三层for加位运算。
3、折半----查找
折半查找的思想:在有序数组中,通过折半,不断的重新锁定区间,区间在缩小。如果该数根本不存在,区间不存在;若果该数等于中间角标值,则为找到,此时mid=max=min?。
/*
需求: 1.折半查找
2、插入
思路:
*/
class halfSearch
{
public static void main(String[] args)
{
int [] arr={2,3,22,44,67,77,88,99};
int index=getIndex3(arr,67);
System.out.println(index);
}
//普通查找
public static int getIndex(int[] arr,int key)
{
for(int i=0;i<arr.length;i++)
{
if(key==arr[i])
return i;
}
return -1;
}
//折半查找
//折半的实质是在锁定区间
public static int getIndex2(int[] arr,int key)
{
int min=0,
max=arr.length-1,
mid=(min+max)/2;
while(key!=arr[mid])
{
if(key>arr[mid])
min=mid+1;
if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
//折半查询:第二种
public static int getIndex3(int[] arr,int key)
{
int min=0,
max=arr.length-1,
mid;
while(min<=max)
{
mid=(min+max)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1;
}
}
在有序数组中插入一数,保持有序?
若果该数存在,插入位即为mid角标;
若果该数不存在,插入位为min角标。
4、循环条件
循环的难点在于循环条件不好找,怎么思考呢?
这个终止点,是逻辑的终止,是执行结果的终止。如:10进制转化2进制,可以通过思考去索取该终止点,但更应该通获得过实验获得,这大概是最可靠的做法吧。
5、指针的应用
用于在循环体中,计数或者指向,遍历中用法举例:
: int pos=arr.length;
--pos
在遍历中赋初始值,int x =pos;
6.二维数组
所存元素为数组。
/*
二维数组
装的是一维数组
下面,二维数组求和
思路:
先求一维,再求二维,大圈套小圈,用嵌套循环
*/
class twot
{
public static void main(String[] args)
{
int[][] arr={{1,2,3},{4,5,6},{7,8,9,10}};
sum(arr);
}
//二维数组求和
public static void sum(int[][] arr)
{
int sum=0;
for(int x=0;x<arr.length;x++)
{
for(int y=0;y<arr[x].length;y++)
{
sum+=arr[x][y];
}
}
System.out.println(sum);
}
}
六、内存
栈内存:存放局部变量
特点:用完自动释放
堆内存:new的数据
特点:1.有引用地址
2.有用默认初始化值
3.垃圾回收机制:当堆内存中的实体不被引用时,会被jvm当成垃圾,不
定时调用垃圾回收机制 ,来清除
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------