【Rookie初学Java】关于初学Java遇到的一些具体问题

初学Java的一些问题

1 关于jdk jre jvm的关系

jdk>jre>jvm

jdk即Java Development Kit是java语言的软件开发工具包,它是给开发者使用的,其中包含了jre与jvm

jre即Java Runtime Environment是java运行环境,可以让计算机运行java程序

jvm即Java Virtual Machine即java虚拟机

2 标识符与基础数据类型

标识符的命名:
        只能由字母数字下划线和$组成,以字母开头
        采用驼峰命名法,例如studentName 即首单词小写,其余单词首字母大写
        尽量做到言简意赅,见名知意
    
    
基础数据类型有:
    int (4Byte)默认值0;
    byte (1Byte)默认值0;
    short (2Byte)默认值0;
    char (2Byte,与c不同是为了方便存中文)默认值null;
    float (4Byte)默认值0.0;
    long (8Byte)默认值0;
    double (8Byte)默认值0.0;
    boolean (1bit)默认值false;
    

3 关于包

  • 打包和编译运行
package tax;

import java.util.Scanner;

public class Test {
        public static void main(String[] args)
        {
            Scanner s = new Scanner(System.in);
            System.out.println("继续输入纳税人请输入1");
            while(s.nextInt()==1) {
                Person p = new Person();
                System.out.println("请输入纳税人类型:");
                int index = s.nextInt();
                p.setStatus(index);
                System.out.println("请输入收入:");
                double in = s.nextDouble();
                p.setIncome(in);
                System.out.println("纳税人需要缴纳的税额为" + p.money() + "¥");
                System.out.println("继续输入纳税人请输入1");
            }

        }
    }
例如这个类,将其打包到tax
    同处于这一个包下的还有Person.java
    
package tax;

public class Person
{
       private int status;
       private double income;
       private double tax;   //Person类的成员属性
       public  double money({
        } //该方法返回taxer的税额
       public void setStatus(int s){
            status = s;
        }
       public void setIncome(double in){
            income = in;
        }
       public void setTax(double t){
            tax = t;
        }//通过一些public方法可以更改对象属性,或者获得成员属性

}
                            
 // 其中方法过长将其省略了
 /*
D:\EditPlus\tax>javac Test.java
Test.java:11: 错误: 找不到符号
                Person p = new Person();
                ^
  符号:   类 Person
  位置: 类 Test
Test.java:11: 错误: 找不到符号
                Person p = new Person();
                               ^
  符号:   类 Person
  位置: 类 Test
2 个错误
*/
报错找不到符号 原因是没有Person.class文件     
/*
D:\EditPlus\tax>javac *.java       //正常编译
D:\EditPlus\tax>java Test
错误: 找不到或无法加载主类 Test          //运行报错
*/
 //对于包中的文件我们采用返回上一级的状态下   java 包名.文件名来运行
 例如:
D:\EditPlus>java tax.Test
继续输入纳税人请输入1
//这样可以正常运行
                            

4 Java文件的编译与运行

  • 基础dos命令

    dir:显示当前目录下的文件
    mkdir xxx:创建名称为xxx的文件夹
    ↑/↓:查看上/下一条命令
    盘符:如c: d:切换到指定硬盘
    cd:进入文件夹
    del xxx:删除指定文件
    ctrl+c 退出操作
        
        
    javac xxx.java:编译java文件生成相应.class文件
    java xxx:运行文件
    

5 一些测试

  • 类名
class Main 
{
	public static void main() 
	{
		System.out.println(hello world!);
	}
}
    /* 
            文件名为noName.java
            类名叫做Main
            编译javac noName.java 编译能通过,随之生成了Main.class文件
            随后java noName 报以下错误:
            
               错误: 找不到或无法加载主类 noName
            只有java Main能够正常运行
    */


结论:在写java程序的时候,我们应该把类名首字母大写,并且和文件名相同
    
  • 关于main方法

    class  Main
    {
    	public static void main(String[]) 
    	{
    		System.out.println("Hello World!");
    	}
    }
    删掉参数名args报错
        /*
                    Main.java:3: 错误: 需要<标识符>
                        public static void main(String[])
                                                        ^
                1 个错误
       */
        //但是参数名可以叫别的,只要标识符命名合法就行
        
        class  Main
    {
    	public static void (String[] args) 
    	{
    		System.out.println("Hello World!");
    	}
    }
    删掉main同样报错
        /*
                    Main.java:3: 错误: 需要<标识符>
                        public static void (String[] args)
                                          ^
                1 个错误
        */
        class  Main
    {
    	public static main (String[] args) 
    	{
    		System.out.println("Hello World!");
    	}
    }
    
    删掉void报错
        /*
                    Main.java:3: 错误: 方法声明无效; 需要返回类型
                        public static main (String[] args)
                                      ^
                1 个错误
        */
    class  Main
    {
    	public void main (String[] args) 
    	{
    		System.out.println("Hello World!");
    	}
    }
     删掉static报错
         /*
                     错误: main 方法不是类 Main 中的static, 请将 main 方法定义为:
                   public static void main(String[] args)
         */
         class  Main
    {
    	 static void main (String[] args) 
    	{
    		System.out.println("Hello World!");
    	}
    }
    
     删掉public报错
         /*
                     错误: 在类 Main 中找不到 main 方法, 请将 main 方法定义为:
                   public static void main(String[] args)
                否则 JavaFX 应用程序类必须扩展javafx.application.Application
         */
     
     结论:关于main方法定义,除了参数名可以改变,其他的格式都不能改变(psvm)
    

6 关于成员属性默认值

import java.util.Scanner;

public class Test03 
{
	static int life;
	public static void main(String[] args) 
	{
		System.out.println("life默认值"+life);
		Scanner scan = new Scanner(System.in);
		life = scan.nextInt();
		System.out.println("更改后"+life);
	}
}
/*
D:\EditPlus\Test>java Test03
life默认值0
1                                      //输入1
更改后1
*/
对于下一次重新运行static 变量还会恢复默认值
    
    
import java.util.Scanner;

public class Test03 
{
	static int life;
	public static void main(String[] args) 
	{
		
		System.out.println("life当前值"+life);
		Scanner scan = new Scanner(System.in);
	}
}
/*
life当前值0
*/
结论:
   1.基础数据类型的默认值:
    int long short byte0
    float double0.0
    char:null
    booleanfalse
   2.静态变量的值会初始化,未附值为默认值,附值则为该值

7 关于附值

public class Test00 
{
	public static void main(String[] args) 
	{
		byte num = 200 ;
		System.out.println(num);
	}
}

/*
D:\EditPlus\Every>javac Test00.java
Test00.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
                byte num = 200 ;
                           ^
1 个错误
*/

这让我们不禁思考,1.等号右边是不是会把我们的数字默认为int让后附值给左边呢?
			   2.赋值语句是不是先执行右边吗?
    
public class Test00 
{
	public static void main(String[] args) 
	{
		byte num = 12 ;
		num  = num + 1;
		System.out.println(num);
	}
}
/*
D:\EditPlus\Every>javac Test00.java
Test00.java:6: 错误: 不兼容的类型: 从int转换到byte可能会有损失
                num  = num + 1;
                           ^
1 个错误
*/
这更证明了我们的猜测
    结论:
   1. 赋值语句会先执行等号右边,再将其赋值给左边。
   2.右边数字会被默认为int类型,当把大的数据类型附值给小的类型时,编译器会报错需要强转
    小转大则不会。
    
    

8 case穿透


public class Test00 
{
	public static void main(String[] args) 
	{
		int num = 1;
		switch(num)
		{
			case 1:System.out.println(num);
			case 2:System.out.println(num);
			case 3:System.out.println(num);
			case 4:System.out.println(num);break;
			case 5:System.out.println(num);break;
			default:break;
		}
		
	}
}

/*
D:\EditPlus\Every>java Test00
1
1
1
1
*/
结论:
    case后边如果不加break,从对应的那一项开始会以此往后执行,直到遇到break
    这种现象叫做case穿透
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值