5、运算符:变量的意义就在于可以进行运算,运算需要用运算符来表示,分为以下几种

 class test
{
public static void main(String[] args)
{
//赋值运算符 =(赋值) +=,-=,*=,/=
int a=1234,b; /*算数运算符 +(加) -(减) *(乘) /(除) %(取余) ++(自增) --(自减) +(字符串连接)
*1、除法运算结果自动转换为int型。
*2、取余结果的正负取决于被除数
*3、任何类型变量和 字符串 进行+操作,都是连接操作,结果为字符串类型
*4、++和--如果在变量前先运算再自增(减);在变量后则相反。这里的先后是在有其他运算时,否则效果相同
*/
a=a/-1000*1000;
a=a%333;
b=++a;
System.out.println("a="+a);
/*
*a+=1==>a=a+1,其他赋值运算类似;
*但是有一点需要注意:前者是赋值运算,后者是算术运算+赋值运算
*!!!赋值运算在赋值前会进行类型检测,如果类型内存较高,就会强制类型转换而且进行高位去除
*!!!而算数运算符在有变量进行计算时不能确定类型,就会使用默认类型
*!!!总结:两者区别在于前者自动强制转换
*/ /*
*比较运算符 ==(等于) !=(不等于) >(大于) <(小于) >=(大于等于) <=(小于等于) instanceof(是否是类的对象)
*运算都有结果,比较运算的结果是true或false,即boolean值。
*/
System.out.println(3>2); /*
*逻辑运算符:用于连接两个boolean类型的表达式
* &(与,一假则假) |(或,一真则真) !(非,取反) ^(异或,两边不同则真)
* &&(与,一假则假) ||(或,一真则真)
*!!!单双&|的区别在于
*1、后者有短路效果,即当满足判断条件(&时第一个为假,|时第一个为真)时,后面的表达式不进行计算
*2、&,|还可以用位运算,而&&,||更常用连接boolean表达式
*
*
*/
int c=3;
System.out.println(c>2&c<5);
/*
*!!!异或有一个特点:一个数异或另一个数两次,得到自身值
*有一个例子就是不用第三个变量交换两变量的值
*/
c=c^3^3;
System.out.println("c="+c);
int d=3,e=5;
System.out.println("开始时d="+d+",e="+e);
d=d^e;
e=d^e;
d=d^e;
System.out.println("交换后d="+d+",e="+e); /*
*位运算符:用于对数据按位byte进行运算,详见下图
*/
System.out.println(~6); /*
*三元运算符:(条件表达式)?表达式1:表达式2
*条件表达式结果为真,运算结果为表达式1;否则为表达式2。
*/ }
}

Java运算符

6、语句:所有语言都只包含三种结构的语句,顺序结构、选择结构、循环结构。这三种结构控制着程序的流程

 class test
{
public static void main(String[] args)
{
//循环结构就是一条条语句从上到下排列,一条语句以;结束。 /*
*选择结构是将条件表达式的值进行判断,如果为真则执行指定语句,(否则执行另一部分语句)
*有if和switch两种:
*if用于 1、对具体值判断,2、对区间判断,3、对boolean类型表达式判断
*switch用于1、对具体值判断,2、值的个数确定(非区间)3、
*/
int a=3;
if(a>5){
System.out.println("a大于5");
}else if(a>3){
System.out.println("a小于5但大于3");
}else{
System.out.println("a小于3");
}
/*1、switch代码块中的顺序没有关系,但是执行时会先按顺序执行case语句,最后执行default语句
*2、break用于结束case语句和default语句,如果在}之前省略,后面还有代码,即使已经正确,
* 还是会向后执行直到break或者}
*/
switch(a){
default:
System.out.println("a非1,3,5");break;
case 3:
System.out.println("a等于3");
case 1:
System.out.println("a等于1");break;
case 5:
System.out.println("a等于5");break;
} /*
*循环结构:while,do...while,for
*需要控制:1、循环条件,2、循环体。
*格式见下图
*!!!for和while的区别在于:
*for中的初始化表达式中可以进行变量定义,而且这个变量只在循环内部有效
*while中则只能用外部定义的变量,所以循环之后不能销毁,如果只用一次会浪费内存
*/ //上面的语句可以嵌套使用 /*
*Java的代码是保存在代码块中的,即{}之中,最简单是下面这种单独的代码块
*还有就是上面依附在if,switch,while之后的代码块,依附在函数/类之后的代码块
*!!!代码块在遇到和开始的{对应的}时就会将生成的变量空间释放,即销毁变量
*所以代码块内可以访问外部代码块中的变量,但是外部不能访问内部变量。
*!!!并且注意代码块内部同样不能重复前面定义过的变量,但是可以在其后重新使用该变量标识。
*
*由于用后即销毁的特性,可以节省内存,如果当变量只用一次时可以节约空间,因为Jvm内存有限。
*/
{
int i=2;
System.out.println("i="+i);
}
int i=3;
System.out.println("i="+i); }
}

Java流程控制

 public class test {
public static void main(String[] args){
int n=0,a=1,b=100;
while(a<b){
if(a%6==0){
n+=1;
}
a++;
}
System.out.println(n); for(int x=1;x<=9;x++){
for(int y=1;y<=x;y++){
//\t是转义字符 制表符,制表符的效果就是 对其显示
System.out.print(y+"*"+x+"="+(x*y)+"\t");
}
System.out.println();
} for(int x=1;x<=5;x++){
for(int y=5;y>=x;y--){
System.out.print(y);
}
System.out.println();
} //倒三角形,可以看做两个三角形的组合,一个由空格组成,就是效果中的-,另一个是*空格构成
for(int x=1;x<=5;x++){
for(int y=1;y<x;y++){
System.out.print('-');
}
for(int z=x;z<=5;z++){
System.out.print("* ");
}
System.out.println();
}
}
}

Java循环测试

     

7、函数:Java中的函数都是在类内,也就是类的方法。简介如下

 public class Function {
//!!!注意Java中不允许嵌套函数。 //main函数没有返回值,用void标示,即空,这是特殊的返回值。可以用return;来结束函数块,也可以直接省略
public static void main(String[] args){
int a=3,b=4,c;
c=add(a,b);
System.out.println(c);
draw(2,2);
} /*!!!需要注意的几点
* 1、这里有一点需要注意:就是由static修饰的函数调用的函数必须也要用static修饰,稍后解释
* !!!2、函数的参数就相当于函数代码块的局部变量,初始化过程在调用时进行,当函数块结束局部变量消失
* !!!而且Java中不允许普通变量的引用传递(即&a的使用方式);只能传值赋值,即将值复制一份赋值
* !!!引用和传值的区别是:只要引用的关系存在,变量就不会消失
* 3、函数封装一定要明确要求,不要过度操作,像下面如果只要和的返回值,就不要输出。
*/
static int add(int a,int b){
return a+b;
} /*
* 同一个类中,变量标识符不能多次使用,但是函数标识符可以,只要满足下面条件即可
* 1、参数个数不同,2、参数类型不同
* !!!注意是判断参数而不是返回值
* 称为函数重载。Java会自动判断应该调用那个函数。
*/
static int add(int a,int b,int c){
return a+b+c;
} static void draw(int a,int b){
if(a<=1||b<=1){
System.out.println("不能构成矩形!");
return;
}
for(int x=1;x<=a;x++){
System.out.print("*");
}
System.out.println();
if(b>2){
for(int z=1;z<=b-2;z++){
System.out.print("*");
for(int y=1;y<=a-2;y++){
System.out.print(" ");
}
System.out.print("*");
System.out.println();
}
}
for(int x=1;x<=a;x++){
System.out.print("*");
}
} }

Java函数

8、数组:下图为简介。注意数组也是对象。

 public class array {
public static void main(String[] args){
//main函数的参数就是字符串数组类型的,值是通过Java。exe运行时传入的
//System.out.println(args[0]); /*数组的 定义有三种格式:其中[]为数组标识
* 1、元素类型[] 数组名=new 元素类型[数组单元个数];
* 2、元素类型[] 数组名=new 元素类型[]{值1,,值2,。。。}; 注意不能再][]中标明数组个数
* 3、元素类型[] 数组名={值1,,值2,。。。};
*/
int[] arr={1,2,3}; /*定义数组的主要目的就是 存/取 值
* 存值可以使用上面的2,3两种方式,也可以在定义后,通过 角标 来保存值
* 取值只能通过 角标 来进行,取值的一个常用操作就是遍历,通过循环控制角标来实现,
* 数组的角标是从0开始的
*/
arr[2]=5;
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}

数组

 public class arrayFunction {
public static void main(String[] args){
/*数组常见操作:
* 1、获取最大/小值
* 2、数组排序
* 3、折半查找(二分查找)
*/
int[] arr={123,2345,31,353,1,35,8111};
int max=getMax(arr);
System.out.println(max);
//Arrays.sort(arr);
bubbleSort4(arr);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
int [] arr1={123,234,345,456,567,678};
int a=getIndex2(arr1,45);
System.out.println(a);
} public static int getMax(int[] arr){
int max=arr[0];
for(int i=1;i<arr.length;i++){
max=max>arr[i]?max:arr[i];
}
return max;
} /*选择排序:就是选择所有数中最小(大)值和最左端值交换;循环执行直到最后一个数
* 和获取最大小值的不同点是需要知道该值的角标来进行交换操作
*/
public static void selectSort(int[] arr){
for(int i=0;i<arr.length;i++){
int min=arr[i],min_index=i;
for(int j=i+1;j<arr.length;j++){
if(min>arr[j]){
min=arr[j];
min_index=j;
}
}
if(min_index!=i){
swap(arr,min_index,i);
}
}
}
//冒泡排序:就是从左到右两两进行比较,大数放左,小数放右。最简单的是循环数组长度次,必然可以完全排序
public static void bubbleSort1(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1;j++){
if(arr[j]<arr[j+1]){
swap(arr,arr[j],arr[j+1]);
}
}
}
}
//下面是冒泡排序的优化(for和while实现),即用一个标志来记录是否某次循环中进行了换位,如果没有表示完全排序,程序可以结束.
public static void bubbleSort2(int[] arr){
for(int i=0;i<arr.length;i++){
boolean flag=false;
for(int j=0;j<arr.length-1;j++){
if(arr[j]<arr[j+1]){
swap(arr,arr[j],arr[j+1]);
flag=true;
}
}
if(flag==false)
return;
}
}
public static void bubbleSort3(int[] arr){
boolean flag=true;
while(flag){
flag=false;
for(int j=0;j<arr.length-1;j++){
if(arr[j]<arr[j+1]){
swap(arr,arr[j],arr[j+1]);
flag=true;
}
}
}
}
//这是冒泡算法的进一步优化,用flag标记进行转换的最大角标,之后的数已经排好了可以不进行下一轮排序
public static void bubbleSort4(int[] arr){
int k,flag=arr.length;
do{
k=flag;
flag = 0;
for (int j = 0; j<k-1; j++)
if (arr[j] < arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag = j+1;
}
}while(flag>0);
}
//交换数组单元
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
} /*查找操作:
*
*/
public static int getIndex(int[] arr,int value){
for(int i=0;i<arr.length;i++){
if(arr[i]==value){
return i;
}
}
//这里返回-1是因为规定返回值类型为int,如果没有找到该单元,则上面没有返回值,而此处的数必须为负数,因为角标为>=0,常用-1
return -1;
}
//二分法查找:数组单元值必须按顺序排列
public static int getIndex2(int[] arr,int value){
int min_index=0,max_index=arr.length-1,mid_index=(min_index+max_index)/2;
if(value<arr[min_index]||value<arr[max_index]){
return -1;
}
while(arr[mid_index]!=value){
if(arr[mid_index]>value){
max_index=mid_index-1;
}else{
min_index=mid_index+1;
}
if(arr[min_index]<value&arr[max_index]>value){
return -1;
}
mid_index=(min_index+max_index)/2;
}
return mid_index;
}
}

Java数组常用操作

public class ArrayFunction
{
public static void main(String[] args){
int a=60;
toOctal(a);
}
public static void toHex(int num){
char[] arr=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},
arr1=new char[8];
int len=arr1.length,newnum=0,i=0;
/*注意下面程序中for和while循环的不同
for(int i=0;i<len;i++){
if(num!=0){
newnum=num&0xf;
arr1[i]=arr[newnum];
num>>>=4;
}
}
*/
while(num!=0){
newnum=num&15;
arr1[i++]=arr[newnum];
num>>>=4;
}
for(int j=len-1;j>=0;j--){
if(arr1[j]=='\u0000')
continue;
System.out.print(arr1[j]);
}
}
//这个函数是从上面总结出来的,因为只需要修改一小部分内容,所有进制转换都可以通过该函数实现,
public static void trans(int num,int base,int offset){
char[] arr=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},
arr1=new char[8];
int len=arr1.length,newnum=0,i=0;
while(num!=0){
newnum=num&base;
arr1[i++]=arr[newnum];
num>>>=offset;
}
for(int j=len-1;j>=0;j--){
if(arr1[j]=='\u0000')
continue;
System.out.print(arr1[j]);
}
}
public static void toHex2(int num){
trans(num, 15, 4);
}
public static void toBinary(int num){
trans(num, 1, 1);
}
public static void toOctal(int num){
trans(num, 7, 3);
} }

Java数组实例-进制转换

题外话:Java内存划分(简单版,详细后叙)

1、寄存器区

2、本地方法区

3、方法区

4、栈内存:保存局部变量,特点是一旦作用域结束,局部变量消失,所以栈区刷新很快,很少有垃圾

5、堆内存:

Java学习笔记二.2的更多相关文章

  1. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  2. 数组排序、递归——(Java学习笔记二)

    升序:      选择排序:         选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置         先出现最小值,最后出现最大值. public stat ...

  3. Java学习笔记二:数据类型II

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一  Java中的数据类型 Java ...

  4. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  5. Java学习笔记二十七:Java中的抽象类

    Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  6. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  7. Java学习笔记二十四:Java中的Object类

    Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...

  8. Java学习笔记二十二:Java的方法重写

    Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...

  9. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  10. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

随机推荐

  1. 基于matlab的音频波形实时採集显示 v0.1

    robj = audiorecorder(44100,16,1); %设置採样频率.採样位数.通道数 recordblocking(robj,1); %採集初步数据(1s长度) rdata = get ...

  2. shrio 身份认证流程-Realm

    身份认证流程 流程如下: 1.首先调用Subject.login(token)进行登录,其会自动委托给Security Manager,调用之前必须通过SecurityUtils. setSecuri ...

  3. Sqoop Import原理和详细流程讲解

    Sqoop Import原理 Sqoop Import详细流程讲解 Sqoop在import时,需要指定split-by参数.Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域 ...

  4. double和decimal的ToString("#.##")方法使用的是四舍五入;

    顺带提一下: 1. double和decimal的ToString("#.##")方法使用的是四舍五入: 2. 静态类System.Math下的Round(decimal d, i ...

  5. UESTC 1584

    http://acm.uestc.edu.cn/#/problem/show/1584 Washi与Sonochi的约定 Time Limit: 3000/1000MS (Java/Others)   ...

  6. 【Henu ACM Round#18 B】Modulo Sum

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] m比较小 <=1000 a[i]直接看成a[i]%m就可以了. 有n个0..999之间的整数.. 如果有一个0那么就直接输出Y ...

  7. 【Codeforces Round #424 (Div. 2) C】Jury Marks

    [Link]:http://codeforces.com/contest/831/problem/C [Description] 有一个人参加一个比赛; 他一开始有一个初始分数x; 有k个评委要依次对 ...

  8. 【Uva 307】Sticks

    [Link]: [Description] 给你最多n个棍子; (n< = 64) 每根棍子长度(1..50) 问你这n根棍子,可以是由多少根长度为x的棍子分割出来的; x要求最小 [Solut ...

  9. SYSU 6356 Dispatching

    Dispatching Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on SYSU. Original ...

  10. 洛谷—— P1328 生活大爆炸版石头剪刀布

    https://www.luogu.org/problem/show?pid=1328 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在< ...