Java入门之“我”不熟悉的知识点
文章目录
前言
因为已经有了一些c/c++,python基础,所以看韩顺平数组之前的视频都是很快速的过了一遍,且把他的笔记pdf浏览了一下,在这里记录一下自己觉得比较陌生的java小知识点。
声明!!:
本学习记录只记录本人不太懂的知识点,本人懂的一些基础语法我就没写哈!
直接上韩老师的视频链接:https://www.bilibili.com/video/BV1fh411y7R8/?p=161&spm_id_from=pageDriver&vd_source=9b9c58d0ef80b422465bf1f7babe166e
一、JRE/JDK是什么?
- JDK:Java Development Kit
- JRE:Java Runtime Environment
- JRE就是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。
- java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
- javac:这是Java的编译器,它用于把Java源码文件(以
.java
后缀结尾)编译为Java字节码文件(以.class
后缀结尾); - jar:用于把一组
.class
文件打包成一个.jar
文件,便于发布; - javadoc:用于从Java源码中自动提取注释并生成文档;
- jdb:Java调试器,用于开发阶段的运行调试。
一个Java源码只能定义一个public
类型的class,并且class名称和文件名要完全一致;
使用javac
可以将.java
源码编译成.class
字节码;
使用java
可以运行一个已编译的Java程序,参数是类名。
二、杂记
1.java代码最最基础的框架
代码如下(示例):
public class Hello{
public static void main(String []args){
System.out.println("ya!");
}
}
class Dog{
public static void main(String []args){
System.out.println("dog!");
}
}
System ‘S’记得大写, 且main方法一定是‘static’
文件中有中文时,记得在文件→设置文件编码→GBK
什么是编译:java源文件通过编译器编译成JVM可以识别的字节码文件.class
什么是运行:有了可执行的java程序(.class字节码文件)通过java.exe对字节码文件进行执行,本质就是.class装载到jvm机执行
2.转义字符
\t :一个制表位,实现对齐的功能
\n :换行符
\\ :一个\
\" :一个
\' :一个'
3.代码规范
- 类,方法的注释,要以javadoc的方式来写
- 非java doc的注释,往往试给代码的维护者看
- 问文件使用utf-8编码
- 行宽度不要超过80字符
- 代码编写次行风格和行尾风格(花括号的位置)
4. DOS指令
DOS:Disk Oprerating System 磁盘操作系统 win+r →help可以看所有指令
…\到上一级目录
dir d:\abc\test200 查看当前目录有什么
cd /D c: 从d盘切到c盘
cd /d d: 从c盘切到d盘 或者直接 d:
cd d:\abc\test200 切换到当前盘的其他目录下 (绝对路径)
cd …\abc2\test200 切换到当前盘的其他目录下 (相对路径)
cd … 切换到上一级
cd \ 切换到根目录
tree d:\Practice 看出这个目录下的所有子目录
cls 清屏
exit 退出
md创建文件 rd删除文件 copy 拷贝文件 del 删除文件
copy ok.txt e:\ok.txt
echo 输入内容到文件 echo hello > hello.txt
type move剪切
5. java数据类型
使用浮点数时的陷进(比较浮点数相等)
double num11 = 2.7;
double num12 = 8.1 / 3;
System.out.println(num11); // 2.7
System.out.println(num12); //接近2.7的一个小鼠,而不是2.7 2.69999 ..7
//得到一个重要的使用点: 当我们对运算结果是小数的进行相等判断是,要小心
//应该是以两个数的差值的绝对值,在某个精度范围类判断
if( num11 == num12) {
System.out.println("num11 == num12 相等");
}
//正确的写法 , ctrl + / 注释快捷键, 再次输入就取消注释
if(Math.abs(num11 - num12) < 0.000001 ) {
System.out.println("差值非常小,到我的规定精度,认为相等...");
6.基本数据类型和String类型的转换
- 基本类型转String类型
语法:将基本类型的值 + “”即可
int n1 = 100;
float n2 = 1.1f;
double n3 = 3.4;
boolean b1 = true;
String str1 = n1 + “”;
String str2 = n2 + “”;
String str3 = n3 + “”;
String str4 = n4 + “”;
System.out.println(str1 + " " +str2 + " " + str3 + " " +str4);
- String类型转基本数据类型
通过基本类型的包装类调用parseXX方法即可
Integar.parseInt("123");
Double.parseDouble("123.1");
Float.parseFloat("123.45");
.....
- 字符串转成字符
char `String s5 = “123”;
s5.charAt(0) 得到s5字符串的第一个字符‘1’`
7. 逻辑运算符
- &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
& 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低 - ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
8. 标识符命名规范
- 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰]
比如: TankShotGame - 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小驼峰, 简称 驼峰法]
比如: tankShotGame - 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
比如 :定义一个所得税率 TAX_RATE
9. 键盘输入语句Scanner
直接上代码好吧
import java.util.Scanner
public class Input{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入名字");
//当程序执行到 next 方法时,会等待用户输入~~~
String name = myScanner.next(); //接收用户输入字符串
System.out.println("请输入年龄");
int age = myScanner.nextInt(); //接收用户输入 int
System.out.println("请输入薪水");
double sal = myScanner.nextDouble(); //接收用户输入 double
System.out.println("名字=" + name+ " 年龄=" + age + " 薪水=" + sal);
}
}
三、一些好玩的编程小练习(全是本人自己动手写过)
1. 打印九九乘法表
重点是在 a * b = c 中如何确定 a 和 b
上代码:
//打印九九乘法表
public class HelloWorld {
public static void main(String []args) {
for(int i = 1; i<= 9; i++){
for(int j = 1; j<=i; j++){
System.out.print(j + "*" + i + "=" + j*i + "\t");
}
System.out.println();
}
}
}
结果:
2. 打印金字塔(三种金字塔)
上代码, 重点是找规律!
//1
public class helloworld {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入层数");
int layer = myScanner.nextInt();
assert layer > 0;
for(int i=1; i<=layer; i++){
for(int j=1; j<=i; j++){
System.out.print("*");
}
System.out.println();
}
}
}
//2
思路:
假设共有n层,每一层i的*有2i-1个,且每一层前面的空格数是n-当前层数i
import java.util.Scanner;
public class helloworld {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入层数");
int layer = myScanner.nextInt();
assert layer > 0;
for(int i=1; i<=layer; i++){
for(int m=0; m<=(layer-i); m++){
System.out.print(" ");
}
for(int j=1; j<=(2*i-1); j++){
System.out.print("*");
}
System.out.println();
}
//myScanner没有被关闭。这可能会导致内存泄漏或其他资源管理问题。
myScanner.close(); // 关闭myScanner
}
}
//3
import java.util.Scanner;
/*
思路1:
除开第一层和最后一层,其他层数两个*中间的空格随着1.3,5,7,...递增
2(i-1)-1 +一个判断
每一行前面的空格规律还是一样
思路2:
每一层只有第一个和最后一个以及最后一行要输出*
*/
public class helloworld {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入层数");
int layer = myScanner.nextInt();
assert layer > 0;
for(int i=1; i<=layer; i++){
//打印前面的空格
for(int m=1; m<=(layer-i); m++){
System.out.print(" ");
}
for(int j=1; j<=(2*i-1); j++){
if(j==1||j==(2*i-1)||i==layer){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
myScanner.close(); // 关闭myScanner
}
}
结果:
3. 打印水仙花数
重点是如何获取百位,十位,各位的数!
package homework;
import java.util.Scanner;
/*
判断一个整数是否是水仙花数,是指一个3位数,其各个位上的数字立方和=其本身
如 153 = 1*1*1 + 3*3*3 + 5*5*5
*/
public class homework02 {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("输入一个数");
int num = myScanner.nextInt();
//拆分成百位,十位,个位
int baiwei = num / 100;
int shiwei = (num % 100) / 10;
int gewei = num % 10;
int all = baiwei * baiwei * baiwei + shiwei * shiwei * shiwei + gewei * gewei * gewei;
if(all == num){
System.out.println("是水仙花数");
}else{
System.out.println("不是水仙花数");
}
myScanner.close();
}
}
结果:输入“153”,打印是水仙花数
4. 求出1-1/2+1/3-1/4…1/100
重点是数据类型的正确使用,以及符号的变换该如何实现!
public class homework05 {
public static void main(String[] args){
double sum = 0;
for(int i = 1; i<=100; i++){
sum += Math.pow(-1.0, i-1) * (1.0 /i);
}
System.out.println(sum);
}
}
5. 求出1 + (1+2) + (1+2+3) +…
很简洁,其实我觉得我写的比韩老师的快速,哈哈哈哈!
public class homework05 {
public static void main(String[] args){
double sum1 = 0;
double sum2 = 0;
for(int i = 1; i<=100; i++){
sum1 += i;
sum2 += sum1;
}
System.out.println(sum2);
}
}
总结
先学到这里,下个周天再来更新,不过要国庆了,可能会国庆后期再来!
最重要的还是要多动手写代码,提升代码思维呀~
记录于2023.9.24