文件编码要相同,尽量为UTF-8
控制台的编码只认GBK,而源文件的编码是以utf-8编码,两者不搭,所以导致编译失败。如果有中时,就选GBK编码,否则就会和控制台的相左
目录
或者在cmd中输入javac -encoding UTF-8 Hello.java 也可以让中文注释运行成功
javac就是编译的意思 ( 编译 compile)
编译后没一个类都对应一个.class类
一个源文件中最多只包含一个public类,其他类的个数不限
运行就是装载到JVM中执行
应用新技术的时候,想到底有什么新的特点和规范再去好好应用
用户变量是针对该用户而言的。而系统变量是针对所有用户而言
DOS就是针对文件目录而言的
有人和我一样用截图来做笔记吗
win+e:调出我的电脑
自动转化类型
图中从左往右转
小知识点
java中的指针: JAVA里面的“指针”_JDream314的专栏-优快云博客_java指针
想法
你平时用到了什么编程思想?
韩老师讲课
先讲基本语法再讲细节
进制
二进制的数以0b开头,后面跟着本身的数如01010代表着二进制010,十进制为2
八进制:10
十进制:01
十六进制:0x
进制转换
2---->10 ?
0110=
输入
==比较的是地址 而equals()比较的是字符
"贾宝玉" . equals("林黛玉") 这样写可以避免空指针
必写语句:
Scanner myScanner=new Scanner(System.in);
输入整数:
int a=myScanner.nextInt ()
输入浮点数:
System.out.println("input score"); double score=myScanner.nextDouble();
输入字符:
char gender=myScanner.next().charAt(0);
先接受一个字符串,后接受第n个字符
char gender = scanner.next().charAt(n);
输入字符串
String s = myScanner.nextLine();
怎样提示输入错误,并要求重新输入,直到输入正确为止
while(1) { cin>>数据; if (数据==正确) break; }
随机数
Math下的random()返回 0到1之间的数
则Math.random()*100返回的事0到100的随机数
想生成整数的话就前面类型强制装换,(int)(Math.random()*100)
如果想生成1~100的数 则(int)(Math.random()*100)+1 因为int类型装潢是向下取整
编程思想
一个循环遍历二维数组
画内存分析图
cmd
技巧:cls(仓老师)就把之前编译运行的代码都清空
ctrl+c退出程序
md 后面写目录 来 新建文件夹
先死后活
先考虑固定的值,再转成可以灵活变换的值
化繁为简
将复杂的需求拆为简单的需求
循环
for
细节
1,巡环条件是返回bool值得一个表达式
2,for(;循环条件;)剩下的两项可以写到其他地方,但是;不能省略
循环变量初始化; for( ;循环条件; ) { 循环操作; 循环变量迭代; } 这样更有助于理解for循环的执行流程
3,for(;;)无限循环,然后配合break和continue使用
4,循环初始化变量&循环迭代变量可以有多条语句,但是规定必须类型一样
00 12 24
``` public static void test6() { int count=0; for (int i=1;i<=100 ;i++ ) { if (i%5!=0) { count++; System.out.print(i+" "); if (count%5==0) { System.out.println(); } } } } ```
while
dowhile
基本语法
注意;
先执行后判断,一定至少执行一次
最后有一个分号
也有循环四要素,只是位置不同
和while区别:要账(dowhile是先去了打你一栋(执行循环语句),在问你还不还钱(判断);
while循环是先问你还不还钱,if不还,则打你一栋 )
char speak; do { System.out.println("wulianbain,huanqian"); Scanner myScanner=new Scanner(System.in); speak=myScanner.next().charAt(0); // if('y'.equals(speak)) // { // } }while('y'!=speak); // 判断是让他是否执行循环体中语句的作用!!!
嵌套循环
break
使用精髓:在巡环到想要的情况下调出就行!!!!
如果后面没有指定的标签,则默认退出最近的标签。如果在多循环体中break label2;则推出标签2
continue
基本语法
用于结束本次循环,继续执行下一次循环
如果后面跟有标签,则对该标签起作用
如果continue lable1; 直接跳转到本例中的 j++(循环变量迭代这里)
return
如果用在方法时,是跳出方法;如果在main函数中就是结束程序
递归
就是自己调用自己,每次调用自己时传入不同的变量(参数)
###
将用栈解决的问题,用递归来解决比较简洁
数组
二维数组
遍历
遍历对角线元素
//The diagonal element // for (int i=0,j=0;i<9 ;i++,j++ ) // { // System.out.println(arr2i); // }
遍历二维数组
一个循环
元素 1 对应的 行号为 [0 / 3] = 0,列号为 [0 % 3] = 0; 元素 2 对应的 行号为 [1 / 3] = 0,列号为 [1 % 3] = 1; 元素 3 对应的 行号为 [2 / 3] = 0,列号为 [2 % 3] = 2; 元素 4 对应的 行号为 [3 / 3] = 1,列号为 [3 % 3] = 0; 元素 5 对应的 行号为 [4 / 3] = 1,列号为 [4 % 3] = 1; 元素 6 对应的 行号为 [5 / 3] = 1,列号为 [5 % 3] = 2; ———————————————— 版权声明:本文为优快云博主「小僧_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:用一个for循环打印出一个二维数组_小僧Coding-优快云博客_循环打印二维数组
两个循环
两个for循环 但是内层for巡皇可以这样写:for(int =0 ; j<数组名[i].length ; j++ )
对象&类
对象内存布局(很重要!!!)
py和java相反,是自上而下的
正正的对象在堆中,而名字在栈中存储
方法调用机制:
结果为:继续执行sayOk()
print()方法被调用
类
是自己定义的数据类型
可以创建别的类,然后在类中创建方法
引例
使用现有技术解决的话
1.单独的定义变量
2.使用属数组来解决,但是属性名得对应数组的下表,也不能作出什么动作
成员方法
在方法中定义一个变量就是局部变量
如何返回多个值?
返回数组,返回对象,还要集合,用go语言,map,调用myTools遍历
返回类型中高精度的不能返回低精度的,会损失精度 如double转为int
方法之中不能在定义方法了,即方法之中不能嵌套定义
类的内部不能直接写代码,代码只能写在方法内部
方法调用
类中不能写方法,只能写在类中函数中!!!
1,同一个类中方法:A可以直接调用方法B,不用new对象
如:
2,跨类中的方法:必须创建对象,不然不知道你调用哪个类中的方法
如:A类中的m1要调用hi()就得在mi中新建B类对象
3,与方法的访问修饰符,所在包有关系
传参机制
基本数据类型
有数字&布尔型
传递的就是值(值拷贝),形参的任何改变不影响实参
例如:swap函数
引用数据类型 (数组,对象)
参数列表为: (int 【】【】 数组名, Person p1)
传递的是地址,地址存放在堆中,引用类型名存放在栈中
还有对象的修改
细节
p=nulll; 相当于把p指向的地址给清空了,并没有影响堆中的属性值 。 但是没有对别的地方置空
p=new Person();又找了1一个新的对象
对象的地址赋给了形参p,然后传给了test200()
红色新建的没有被用就相当于一个垃圾释放掉了
对象
是一个具体的实例
字符串是引用方式存放的
Person p1=new Person();
p1是对象引用(对象名) 就比如自己的名字wzj,只是一个代表你的代号,而你的心理,圣体,眼镜等才是正真的你自己
new Person()才是正正的对象,创建的对象空间(数据)
Person p1; //先声明对象p1
p1=new Person(); //创建对象
在内存中创建的过程看【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili
属性
可以是基本类型,也可以是引用数据类型(对象,数组,字符串)
重载
方法名:必须相同
参数列表:必须不同。参数类型,个数,顺序至少有一个不一样
返回类型:无要求
构造方法
写法:public 类名(参数 ){}
反编译:cmd中输入javap 类名.class
javap可以了解编译器内部的很多工作,对class文件提供的字节代码进行反编译
class Dog(){
Dog();
}
this
哪个对象调用,this就代表哪个对象
this是影藏起来的