标识符:
1、组成——字母/_/$开头+字母/_/$/数字
2、严格区分大小写
3、不能是java中的关键字
关键字:
1、java中已经用作他途的,不能再继续使用
2、goto等虽然java中没有使用,但是后期有可能会用,称之为保留字,也不可以用作标识符。
2、null false true虽然不是关键字,但是不能作为标识符
java采用的字符集合为:Unicode(万国码,统一字符集),它只是一种标准。utf-8和utf-16都是它的实现。
数据类型:
1、数值型:
- 整型(备注:字面常量值是int类型,所以如果将一个超过int范围的字面值赋给一个long类型的变量存放时,后面加L或者l;如果byte和short变量赋值时,所赋的字面值不超过byte和short的范围,可以正常赋值)
- 浮点型(备注:浮点型的字面常量值为double类型的,将一个字面小数赋给一个float变量类型的数据存放时,需要在字面值后加F或f)
2、逻辑型(ture/false)
3、字符型(备注:一个单引号引起来的单个字符,不可以是0个,也不可以是多个。可以参与四则运算)(一个字符两个字节,所有的字符都对应着二进制码,字符也有相应的二进制代表,二进制转换即为对应的数字,所以可以参与四目运算。)
运算符:
优先级:
1、单目运算符>双目运算符>三目运算符
2、小括号最为优先(在实际的开发过程中,表达式使用多种运算符时,不必特别在意优先级,而是使用括号。因为使用括号,还有另外一个优点就是代码便于阅读。)
3、算数【++ -- 大于*/% 大于+ -】大于关系运算【> >= < <= 大于!= ==】大于逻辑运算【!大于其他的逻辑运算符】大于条件运算符大于赋值运算符
关系/比较运算符:> >= < <=用于比较基本数据类型;== !=既可以比较基本数据类型又可以比较引用数据类型
交换两个数的方法:
第一种:
//借助一个临时变量
int num1=10;
int num2=4;
int temp=num1;
num1=num2;
num2=temp;
第二种:
//两个数字异或三次
int num1=10;
int num2=4;
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
课后作业:
1、输出1-1000万的素数,计算运行的时间(初步代码,还需改进)
public class TestPrime {
public static void main(String[] args) {
//程序运行开始的时间
long t1=System.currentTimeMillis();
int count=1;
//输出1-1000万以内的素数
System.out.print(2+" ");
for(int i=3;i<=10000000;i++){
int j=2;
for(;j<=(i/j);j++){
if(i%j==0){
break;
}
}
if(j>(i/j)){
System.out.print(i+" ");
count++;
//每行10个输出
if(count%10==0){
System.out.println();
}
}
}
long t2=System.currentTimeMillis();
System.out.println();
System.out.println("计算结束花费时间为:"+(t2-t1));
}
}
2、写一个类模拟栈,完成insertSort排序,可用空间为1
代码实现:
模拟栈:
public class Stack {
private List<Integer> list=new ArrayList();
private int index=-1;
/**
* 模拟出栈操作
* @return
*/
public int pop(){
if(list.size()<=0){
System.out.println("栈内没有任何的元素");
return -1;
}else{
int number=list.get(index);
list.remove(index);
index--;
return number;
}
}
/**
* 模拟进栈操作
*/
public void push(int num){
list.add(num);
index++;
}
/**
* 按顺序打印栈元素
*/
public void print(){
System.out.println(list);
}
/**
* 返回栈的长度
* @return
*/
public int length(){
return index+1;
}
/**
* 判断栈是否为空
* @return
*/
public boolean isNull(){
if(index<0){
return true;
}else{
return false;
}
}
/**
* 查看栈顶元素,但是不出栈
* @return
*/
public int peek(){
return list.get(index);
}
}
使用两个栈实现插入排序:
public class TestSort {
public static void main(String[] args) {
//创建一个栈
Stack oldStack=new Stack();
oldStack.push(166);
oldStack.push(89);
oldStack.push(45);
oldStack.push(189);
oldStack.push(22);
oldStack.push(1);
//打印栈内元素
oldStack.print();
oldStack=insertSort(oldStack);
oldStack.print();
}
/**
* 实现插入排序,空间复杂度为1
* @param oldStack 传入一个含有乱序元素的栈
*/
public static Stack insertSort(Stack oldStack){
//新栈为有序的栈
Stack newStack=new Stack();
//判断栈中的元素是否为空栈
if(oldStack.isNull()){
System.out.println("栈内没有任何元素!");
}else{
//将乱序栈内的第一个元素加入到新栈中
newStack.push(oldStack.pop());
//如果乱序栈不为空,就进行出栈排序
while(!oldStack.isNull()){
int small=0;//记录乱序栈栈顶元素比新栈栈顶元素小的个数
Integer temp=0;
if(oldStack.peek()>=newStack.peek()){
newStack.push(oldStack.pop());
}else{
//乱序栈中的栈顶元素小于新栈中的元素,将乱序栈中的栈顶元素放到临时变量temp中
temp=oldStack.pop();
//将新栈中比temp大的元素先放到乱序栈中,并记录个数
while(temp<newStack.peek()&&!newStack.isNull()){
oldStack.push(newStack.pop());
small++;
}
newStack.push(temp);
//将放入乱序栈中的元素放回新栈
for(int i=0;i<small;i++){
newStack.push(oldStack.pop());
}
}
}
}
return newStack;
}
}