流程控制
用户交互Scanner
输入&输入方法(比如是输入hello world)
next()输入字符串不能存在空格 (输出hello)
nextLine(),回车前的所有字符,可以获取到空格 (输出hello world)
package xxxxx.xxx.xxx
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
// 从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输出的内容为:"+str);
scanner.close();
}
}
判断
if (scanner.hasNextInt()) { //这个条件是判断 输入是不是整数的
i = scanner.nextInt();
System.out.println("整数数据:" + i);
} else {
System.out.println("输入的不是整数数据:" + i);
}判断字符串有函数: x.equal(“xcsccsc”) 判断x输入字符串和xcsccsc字符串是否相等
判断
if
单层--if
if(){
System.out.println("*****")
}两层--if else
if(){
System.out.println("*****")
}else(){
System.out.println("*****")
}多层--if else if else
if(){
System.out.println("*****")
}else if(){
System.out.println("*****")
}else if(){
System.out.println("*****")
}else(){
System.out.println("*****")
}
switch case
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}注意:
switch变量类型:byte short int char string(java7以后)
case变量类型:字符串常量 自变量
case穿透:不写break就在条件后全执行
循环
while
while(布尔值){}
注意要写退出循环的限制条件,不然会变成死循环
eg:i++;
do while
do{}while();//注意有分号
for
for(初始化(可以空);布尔表达式;更新){//分号隔开
代码语句
}在idea里面,写100.for可以直接生成
增强for
public class ForDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50}; //定义了一个数组
for (int x:numbers){
System.out.println(x);
}
}
}遍历数组,每次for循环输出
While和do-While的区别:]
while先判断后执行。dowhile是先执行后判断!
Do...while总是保证循环体会被至少执行一次!这是他们的主要差别
break&&continue
break用于强制退出循环,不终止程序(放在判断后)
continue只是这一次不执行,下一次继续执行
(goto在java不存在)但是可以利用标签使用,起跳转作用
方法
基础
方法类似于函数
System.out.printIn() 类.对象.方法
Java方法是语句的集合,它们在一起执行一个功能
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
public class Demo01{
//main方法
public static void main(string[]args){
int sum=add(a:1,b:2);System.out.println(sum);
}
//加法
public static int add(int a,int b){
return a+b;
}
}在写方法的时候public int add(int a,int b),要想调就要加一个static
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展
可以多用写一些方法,把main函数变得更加简洁
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
....
return 返回值;//有返回类型,一定要写return
}调用
当方法返回一个值的时候,方法调用通常被当做一个值
如果方法返回值是void,方法调用一定是一条语句
重载
函数名称相同,参数类型不同(返回值是谁,就调用谁)
参数类型也可以相同,在方法里面强制转化就行
//比大小
public static int max(double num1,double num2){
int result = 0;
if (num1==num2){
System.out.println("num1==num2");
return 0; //终止方法
}
if (num1>num2){
result = (int)num1;
}else {
result = (int)num2;
}
return result;
}
但是在调用的时候,要调配和方法相匹配,要不编译器会报错
命令行传参
public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
直接在idea里面的命令行运行不成功,所以打开方法-所在文件夹,使用命令行编译,发现还是不行
因为运行需要在src目录下,回退完目录后,再次运行
源码定义的是一个数组,所以在语句后面跟上参数this is kuangshen
发现成功返回
也就是说main方法也是可以传参的
可变参数
本质就是一个数组
JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。、
在方法声明中,在指定参数类型后加一个省略号(...)
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
public class Demo04 {
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,45,5);
}public void test(int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
System.out.println(i[5]);
}
}
递归
自己调用自己
简单来说就是找到公式规律,然后往前一个未知数推导(复杂问题,简单化,减少重复计算,减少代码量)
递归结构包括两个部分:
递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
递归体:什么时候需要调用自身方法
java主要使用的是栈,就是罐子里面一个叠一个,先放后拿
静态&非静态
静态:有static
在其他类里面写,可以在main里面调用
类.方法非静态:
调用:将类实例化new--------->对象类型 对象名=对象值
Student student =new student();

调用
有static,和类一起加载,存在较早
无static,在类实例化之后才存在,比上面那个迟
所以不能在有static,调用无static的方法

b()明显报错了
数组
定义一组类型,相同类型的有序集合,通过下标访问
定义
public static void main(stringl args){
int[] nums; //1.定义
int nums2[];//2.c和c++使用的多
}没定义,返回默认值(int 的默认值就是0)
获取数组长度是arrays。length
初始化
静态初始化
// 静态初始化: 创建 + 赋值
int[] a = {1,2,3,4,5,6,7,8};
System.out.println(a[0]);动态初始化(
包含默认初始化)先分配内存(初始化)(变成默认值),再赋值
// 动态初始化 : 包含默认初始化
int[] b = new int[10];
b[0] = 10;数组的默认初始化
就是分配内存的初始化
内存分析
堆
栈
方法区
步骤 1:声明数组
代码int[] array = null;声明了一个整型数组变量array,并将其初始化为null,表示该数组目前没有指向任何实际的数组对象步骤 2:创建数组
代码array = new int[10];创建了一个长度为 10 的整型数组,并将其引用赋值给array变量,此时数组的每个元素都有了默认值(整型数组默认值为 0)步骤 3:给数组元素赋值
代码通过类似nums[0] = 1;这样的语句(这里变量名可能存在笔误,应为array),给数组的每个元素依次赋值,从array[0]到array[9]分别赋值为 1 到 10
先声明空数组(栈),在new一个数组(在堆内部分配空间),然后赋值(赋值)

特点
其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
其元素必须是相
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



