Java学习笔记

Java学习笔记

注:资料整理于b站韩顺平java零基础教学。

java特性

1.面向对象、健壮性
2.跨平台性:一个编译好的.class文件可以在多个系统下运行。
3.解释型:如javascript,php,java。不能直接被机器执行,需要解释器来执行。
【区别】可以直接在机器上运行

java运行

1.jvm:java虚拟机,包含在jdk中。解释-翻译-执行。”一次编译,到处运行“
2.javac:用于编译。将java文件生成.class字节码文件。
3.jre:java运行环境,包含在jdk中。
总结:
1.JDK=JRE+开发工具;
2.JRE+JVM+Java SE标准类库(java核心类库);
4.如果仅仅运行开发好的.class文件,就只需要JRE。

关于cmd编码

1.使用 javac test01.java 在cmd运行时,提示GBK等中文乱码问题:
在cmd输入 CHCP 65001 ,意思是将cmd编码改为UTF-8
2.(若未解决)编译时使用 javac -encoding UTF-8 test01.java

编码设置:

cmd含义
chcp 65001UTF-8
chcp 950繁体中文
chcp 936简体中文(GBK)
chcp 437MS-DOS美国英语

设置系统变量
变量名:JAVA_TOOL_OPTIONS
变量内容:-Dfile.encoding=UTF-8

java开发细节

1.java严格区分大小写
2.一个源文件中最多只能有一个public类,其他类不限个数。
3.如果源文件指包含一个public类,则文件名必须按类名命名。
4.\r表示回车,会删除\r前面的文本,只打印\r后面的内容。
5.生成文档注释:

javadoc -d D:\\AAA\\test -author -version test01.java

[生成文件的路径] [标签] [java文件名]

6.windows dos下命令
创建文件夹: md [文件夹名] //可以创建多个文件,输入多个文件名即可
删除文件夹: rd [文件夹名] //可以删除多个文件,输入多个文件名即可
删除文件: del [文件名]
清屏:cls
退出:exit
复制:copy [文件名] [路径,包含文件名],例如: copy text.txt D:\ok.2txt
剪切:move
输入内容到文件:echo
以树状结构展示文件:tree

7.关于路径
相对路径:从当前目录开始定位,形成的路径;
绝对路径:从根目录开始定位,形成的路径。
8.path环境变量:
JAVA_HOME指向JDK安装的主目录
9.行宽不要超过80字符

java变量

1.基本数据类型:byte-1, short-2, int-4, long-8, float-4, double-8, char-2, boolean-1等
浮点数=符号位+指数位+尾数位,尾数部分可能丢失,造成精度损失。
数据类型大小不受平台限制(java具有跨平台性),都是固定大小。
2.引用数据类型:类class, 接口interface, 数组[]。
3.尽量小,不要大,占内存。
4.byte(字节)是基本存储单位,bit是最小存储单位。1 byte = 8 bit
5.浮点数运算时,要注意精度问题。在比较时,可以将两个变量相减取绝对值,其值在某个范围(0.001)内即视为正确。
如,Math.abs(a - b)
6.字符:单引号; 字符串:双引号。
字符类型本质: 1)字符型存储到计算机中,需要将字符对应的码值找出来; 2)字符和码值的对应关系是通过字符编码表决定的。
ASCII编码表: 一个字节表示,128个字符,实际上一个字节可以表示出256个字符,只用了128个。
unicode编码表: 用两个字节表示字符,字母和汉字统一占两个字节。
utf-8编码表: 字母1字节,汉字3字节。
gbk:可以表示汉字,且范围更广。字母1字节,汉字2字节。
big5:繁体中文, 香港, 台湾。
7.char short byte 不可互相转换,会出错。
8.字符串转换 :

  String c = "234";
  int num1 = Integer.parseInt(c);
  byte num2 = Byte.parseByte(c);
  double num3 = Double.parseDouble(c);
  float num4 = Float.parseFloat(c);
  short num5 = Short.parseShort(c);
  boolean num6 = Boolean.parseBoolean(c);

java api 接口文档

1.www.matools.com 中文接口在线文档
2.思路:包–类–方法

java 算数运算符

1.题目一

int i = 1;
i = i++;
System.out.println(i);

问:结果是多少?为什么?
答:结果是1,过程为:temp=i; i=i+1; i=temp;

2.题目二

int i = 1;
i = ++i;
System.out.println(i);

问:结果是多少?为什么?
答:结果是2,过程为: i=i+1; temp=i; i=temp;

java 键盘输入

例一:

import java.util.Scanner;
public class test01{
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		System.out.println("please input your name:");
		String name = myScanner.next();

		System.out.println("please input your age:");
		int age = myScanner.nextInt();

		System.out.println("please input your salary:");
		double salary = myScanner.nextDouble();

		System.out.println("您的信息如下:");
		System.out.println("name:" + name + "\nage:" + age + "\nsalary:" +salary);
	}
}

关于原码、反码、补码 [!!背下来—很重要!!]

二进制中 0表示正数,1表示负数。
1.正数的原码、反码、补码是一样的;
2.负数的反码=它的原码符号位不变,其它位取反;
3.负数的补码=它的反码+1, 负数的反码=负数的补码-1;
4.0的反码、补码都是0;
5.java没有无符号数,即java中数都是有符号的;
6.在计算机运算时,都是以补码的方式运算的;
7.当我们看运算结果时,要看他的原码;

位移:左移一位等于×2; 右移一位等于÷2
注意:小数参与运算时,得到的是近似值

条件语句

1.if-else 单分支、双分支、多分支。嵌套不要超过三层。

//	[插]读取键盘输入的字符:先接收字符串,再接收字符串的第一个字符
    char gender = myscanner.next().charAt(0);
  1. switch语句; for循环 ; while循环; do-while循环
    例一:
public class test01{
	public static void main(String[] args) {
		for (int i = 1; i<=5; i++){
			System.out.println(i+"+"+(5-i)+"=5");
		}
	}
}

例二:

import java.util.Scanner;

public class test01{
	public static void main(String[] args) {
		Scanner myscanner = new Scanner(System.in);
//		要在循环体外面声明变量answer,否在在while判断时无法读取answer。(变量作用域问题)
		char answer = ' ';
		do {
			System.out.println("五连鞭啪啪");
			System.out.println("还钱y/n");
			answer = myscanner.next().charAt(0);
		}while (answer !='y');
	}
}

多重循环

例一:

import java.util.Scanner;
public class test01{
	public static void main(String[] args) {
		/*
		统计三个班的成绩,每个班5人,求每个班的平均分和所有班级的平均分
		思路:1.输入每个班内部5个人的成绩,外循环3个班级;
			2.内循环数据用于求班内平均分,外循环数据求所有班级平均分
		 */
		Scanner myscanner = new Scanner(System.in);
		double res = 0, sum =0, avg = 0;
		for (int i=1; i<=3; i++){
			double sum_class = 0;
			double avg_class = 0;
			for (int j=1; j<=5; j++){
				System.out.println("请输入"+i+"班第"+j+"位同学的成绩:");
				double score = myscanner.nextDouble();
				sum_class += score;
				avg_class = sum_class / 5;
			}
			System.out.println(i+"班的平均分为:"+avg_class);
			sum += avg_class;
		}
		avg = sum / 3;
		System.out.println("所有班級的平均分为:"+avg);
	}
}

例二:

import java.util.Scanner;
public class test01{
	public static void main(String[] args) {
		/*
		统计三个班及格人数,每个班5人。
		 */
		Scanner myscanner = new Scanner(System.in);
		int count = 0;
		for (int i=1; i<=3; i++){
			for (int j=1; j<=5; j++){
				System.out.println("请输入"+i+"班第"+j+"位同学的成绩:");
				double score = myscanner.nextDouble();
				if (score >= 60){
					count++;
				}
			}
		}
		System.out.println("三个班級及格的人数为:"+count);
	}
}

例三:

import java.util.Scanner;
public class test01{
	public static void main(String[] args) {
		/*
		九九乘法表
		思路: 1.按行输出;1*1 | 1*2 2*2 | 1*3 2*3 3*3
		i == j 下一行,每次从1开始,左边内循环,右边外循环
		 */
		for (int right=1; right<=9; right++){
			for (int left=1; left<=right; left++){
				int res = left * right;
				System.out.print(left+"*"+right+"="+res+"\t");
			}
			System.out.println();
		}

	}
}

例四:
[初级]

public class test01{
	public static void main(String[] args) {
		/*
		打印金字塔
		思路:外循坏四层,内层
		第一层 1  空格4
		第二层 3  空格3
		第三层 5  空格2
		第四层 7  空格1
		 */
		for (int i=1; i<=5; i++){
			for (int j=1; j<=5-i; j++){
				System.out.print(" ");
			}
			for (int j=1; j<=i*2-1; j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

[升级版]

import java.util.Scanner;
public class test01{
	public static void main(String[] args) {
		/*
		打印金字塔
		思路:外循坏四层,内层
		第一层 1  空格4
		第二层 3  空格3
		第三层 5  空格2
		第四层 7  空格1
		 */
		Scanner myscanner = new Scanner(System.in);
		System.out.println("请输入行数:");
		int total = myscanner.nextInt();
		for (int i=1; i<=total; i++){
			for (int j=1; j<=total-i; j++){
				System.out.print(" ");
			}
			for (int j=1; j<=i*2-1; j++){
				if (j==1 || j==i*2-1 || i==total){
					System.out.print("*");
				}else {
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}

[equals匹配]

import java.util.Scanner;
public class test01{
//	登录验证,一共三次机会,用户名为丁真,密码666显示登陆成功。
//	否则提示还有几次机会,使用for+break完成。
	public static void main(String[] args) {
		Scanner myscanner = new Scanner(System.in);
		String name = "丁真";
		String passwd = "666";
		for (int i=1; i<=3 ; i++){
			System.out.println("请输入用户名:");
			String name_in = myscanner.next();
			System.out.println("请输入密码:");
			String passwd_in = myscanner.next();
			if(name_in.equals(name) && passwd_in.equals(passwd)){
				System.out.println("登录成功");
				break;
			}else {
				int chance = 3-i;
				if (chance==0) {
					System.out.println("登录失败");
					break;
				}
				System.out.println("用户名或密码错误,您还有"+chance+"次机会");
			}
		}
	}
}

代码练习

[1]

public class test01{
	//	某人有100,000元,每经过一次路口,需要交费,规则如下:
//	现金>50000时,每次交5%
//	现金<=50000时,每次交1000
//	计算该人可以经过多少次路口?使用while break完成
	public static void main(String[] args) {

//		int cro = 0;
//		double money = 100000;
//		while(money>50000){
//			money = money - money*0.005;
//			cro += 1;
//		}
//		System.out.println(money);
//		while(money<=50000 && money>=1000){
//			money -= 1000;
//			cro += 1;
//		}
//		System.out.println("一共经过"+cro+"次路口");
//		System.out.println(money);

		int cro = 0;
		double money = 100000;
		while(money>=1000){
			while(money>50000){
				money = money - money*0.005;
				cro += 1;
			}
			money -= 1000;
			cro += 1;
		}

		System.out.println("一共经过"+cro+"次路口");
		System.out.println(money);

	}
}

[2]

import java.util.Scanner;
public class test01{
	public static void main(String[] args) {
//		判断整数大于小于还是等于0
//		思路:取一个整数,if>0 else if =0
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入一个整数");
		int num = myScanner.nextInt();
		if (num > 0){
			System.out.println("这个整数为正整数");
		} else if (num == 0) {
			System.out.println("这个整数等于0");
		} else {
			System.out.println("这个整数为负数");
		}
	}
}

数组

import java.util.Scanner;
public class test01{

	public static void main(String[] args) {
//		翻转数组
		int[] arr={11,22,33,45,56};
		int tmp = 0;
		for (int i=0; i<arr.length/2; i++){
			tmp = arr[i];
			arr[i] = arr[arr.length-i-1];
			arr[arr.length-i-1] = tmp;
		}
		for (int i=0; i<arr.length; i++){
			System.out.print(arr[i]+" ");
		}
	}
  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值