java第二次课-结构化程序设计_补充

本文详细介绍了Java编程的基础知识,包括环境配置、字符数组处理、类和对象的概念、反编译工具使用、与C/C++的对比等内容,并通过具体实例展示了Java程序的设计与调试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       java课程的结构化程序设计已经结束。将要进入类和对象的世界,我们必须打好基础。因此做些补充。课本上不一定有!内容如下:

 

1 环境配置
2字符数组
3 sizeof
4 作业2.14,2.17题(《java程序设计》姜志强)
5 反编译工具
6 与C/C++ 对比
7 常用包
8 Java程序结构

9 Java应用程序(命令行参数)
10 Java运行时常见的问题
11 Java编译小窍门
12 打印笑脸
13 数据输入/出
14 如何查看JDK源码
15 如何确认用哪个java?
16 Java 文件名与类名


1  环境配置
JDK环境变量配置的步骤如下:
我的电脑-->属性-->高级-->环境变量.
配置用户变量:
a.新建 JAVA_HOME
   C:/Program Files/Java/j2sdk1.5.0 (JDK的安装路径)
b.新建 PATH          %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin
c.新建 CLASSPATH
.;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar

测试环境变量配置是否成功:
开始-->运行--〉CMD
键盘敲入: JAVAC   JAVA
出现相应的命令,而不是出错信息,即表示配置成功!


环境变量配置的理解:
  1. PATH环境变量。作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要

把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行

javac/java等工具了。
  2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子

目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。
  3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。

 

2 字符数组
java中字符串和字符串数组都是不需要结束符的 。
public class test
{
 public static void main(String args[])
 {
  /*
  char [] c={'a','b','c'};
  String s="";
  int l=c.length;
  //s = String.valueOf(c);
  s = new String(c);
  */
  
  
  char[] value={'j','a','v','a','语','言'};
     String s1=new String(value);
     String s2="java语言";
  
  int a=value.length;
     int b=s1.length();
     int c=s2.length();
  
        System.out.println(a+"  "+b+"  "+c);
 }
}

C/C++语言:
    char s[4]={'a','b','c','d'};
    char s1[5]={"abcd"};
    int a=strlen(s);
    int b=strlen(s1);
运行后,a=8,b=4;
    char s[5]={'a','b','c','d'};
    char s1[5]={"abcd"};
    int a=strlen(s);
    int b=strlen(s1);

结果是a,b均为4;

 

 

3 sizeof
      在C和C++中,sizeof()运算符能满足我们的一项特殊需要:获知为数据项目分配的字符数量。在C和C++中,size()最常见的一种应用就是“移植”。不同的数据在不同的机器上可能有不同的大小,所以在进行一些对大小敏感的运算时,程序员必须对那些类型有多大做到心中有数。例如,一台计算机可用32位来保存整数,而另一台只用16位保存。显然,在第一台机器中,程序可保存更大的值。正如您可能已经想到的那样,移植是令C和C++程序员颇为头痛的一个问题。

  Java不需要sizeof()运算符来满足这方面的需要,因为所有数据类型在所有机器的大小都是相同的。我们不必考虑移植问题――Java本身就是一种“与平台无关”的语言。


public class GetSize
{
     public static void main(String args[])
        {
          int a = 10;
          System.out.print(new Integer(a).SIZE +" "+Integer.toBinaryString(new Integer(a)));
        }
}

 

 

4 作业2.14,2.17题(《java程序设计》姜志强)
class No14
{
 /*
 public static void main(String[] args)
 {
  System.out.println("I love java programming");
 }
 */
 public static void main(String[] args)
 {
  System.out.print("I ");
  System.out.print("love ");
  System.out.print("java ");
  System.out.println("programming.");
  
 }
}

 

import javax.swing.JOptionPane;
class No17
{
 public static void main(String[] args)
 {
  String input;
  int result;
  input = JOptionPane.showInputDialog("请输入销售额");
  result = Integer.parseInt(input);

  if(result >= 100 && result < 400)
  {
   result *= 0.05;
  }
  else if(result >= 400 && result < 600)
  {
   result *= 0.07;
  }
  else if(result >= 600 && result < 1000)
  {
   result *= 0.08;
  }
  else if(result >= 1000)
  {
   result *= 0.1;
  }
  
  String output = "";

  output += "提成金额为";
  output += result;
  output += "万元";
   
   
  JOptionPane.showMessageDialog(null,output);
  System.exit(0);
 }
}


import javax.swing.JOptionPane;
class No17
{
 public static void main(String[] args)
 {
  String input;
  int result;
  input = JOptionPane.showInputDialog("请输入销售额");
  result = Integer.parseInt(input);
  
 
     if(result >= 1000)
     {
      result *= 0.1;
     }
        else if(result >= 600)
            {
             result *= 0.08;
            }    
        else if(result >= 400)
            {
             result *= 0.07;
            }
        else if(result >= 100)
            {
             result *= 0.05;
            }
         else
         {
          JOptionPane.showMessageDialog(null,"erro");
         }
              
 
 
  String output = "";
  

   output += "提成金额为";
   output += result;
   output += "万元";
   
   
  JOptionPane.showMessageDialog(null,output);
  System.exit(0);
 }
}


import javax.swing.JOptionPane;
class No17
{
public static void main(String[] args)
{
String input;
int result;
input = JOptionPane.showInputDialog("请输入销售额");
result = Integer.parseInt(input);
    int x = result / 100;
    switch(x)
    {
    case 1:
    case 2:
    case 3:result *= 0.05;
    break;
    case 4:
    case 5:result *= 0.07;
    break;
    case 6:
    case 7:
    case 8:
    case 9:result *= 0.08;
    break;
    default:
    {
    if(result >= 1000)
    result *= 0.1;
    else
    {
        System.out.print("erro");
        System.exit(0);
    }
    }
    }
String output = "";
output += "提成金额为";
output += result;
output += "万元";
JOptionPane.showMessageDialog(null,output);
System.exit(0);
}
}

比较上面的几种实现方式,用debug单步执行,观察其效率!

 


5 Java反编译工具
Java下的一个简单易用的反编译工具jad, 可以很方便的将.class反编译为.java

命令使用如:

jad -sJava example1.class


6 与C/C++ 对比
 不再有全局变量
 不再有#include 和#define 等预处理功能
 不再有structure、union及typedef等
 不再有函数、不再有指针、不再有多重继承
 不再有goto语句
 不再有操作符重载(Operatior Overloading)
 取消自动类型转换,要求强制转换
 自动进行内存管理


7 常用包
Language    java.lang      Classes that contain the main core of the Java language.
Utilities        java.util        Support for utility data structures.
I/O               java.io          Support for various types of      input/output.
Text             java.text       Localization support for handling text, dates, numbers, and messages.
Math           java.math      Classes for performing arbitrary-     precision integer and floating-point  arithmetic.
AWT            java.awt        User interface design and event-handling.
Swing         javax.swing   Classes for creating all-Java, lightweight components that behave similarly on all platforms.

Javax          javax              Extensions to the Java language.
Applet         java.applet    Classes for creating applets.
Beans         java.beans     Classes for developing JavaBeans.
Reflection    java.lang.reflect   Classes used to obtain runtime class information.
SQL             java.sql          Support for accessing and processing data in databases.
RMI              java.rmi         Support for distributed programming.
Networking    java.net      Classes that support development of networking applications.
Security       java.security  Support for cryptographic security


8 Java程序结构
 package语句:零个或一个,必须放在文件开始
 import语句:零个或多个,必须放在所有类定义之前
 public ClassDefinition:零个或一个
 ClassDefinition:零个或多个
 InterfaceDefinition:零个或多个
类个数:至少一个类,最多只能有一个public类
源文件命名:若有public类,源文件必须按该类命名
标识符:区分大小写
类库支持:引用其他类。
 类定义:定义程序所需的类及接口,包括其内部的变量、方法等。
 main()方法:应用程序的入口,与标准C中main()函数的地位是一样的。一个应用程序有且只有一个main()方法,main()方法必须包含在一个类中,该类即为应用程序的外部标志。
 程序注释:与C++类似,/*…*/   //…

 

9 Java应用程序(命令行参数)
public class CommArg
{
     public static void main(String args[])
     {
           int i; // Display command arguments
  
           if( args.length > 0 )  //have some command arguments
           {
                 for( i=0; i<args.length; i++ )
                 {
                         System.out.println("arg["+i+"] = "+args[i]);
                 }
           }
           else   //no command argument
           {
                  System.out.println("No arguments!");
           }
    }
}


命令行参数: main( String args[] ),与标准C中main(int argc, char* argv[]) 相似。

 字符串的拼接: "arg[" + i + "] = " + args[i]。

 编译程序:javac HelloWorldApp.java

 运行程序(命令行参数获取):
      java CommArg  first second third

 运行结果:
       arg[0] = first
       arg[1] = second
       arg[2] = third

 

 

10 Java运行时常见的问题
使用“/”最为包名的分割符:
[your home]>java examples/ch1/Welcome1
Exception in thread "main" java.lang.NoClassDefFoundError: examples/ch1/Welcome1 (wrong name: examples/ch1/Welcome1)
        at java.lang.ClassLoader.defineClass0(Native Method)
        ……
解决办法:
[your home]>java examples.ch1.Welcome1
或者
[your home]>java examples/ch1/Welcome1


没有把当前目录加到classpath环境变量中:
[your home]>java examples.ch1.Welcome1
Exception in thread "main" java.lang.NoClassDefFoundError: examples/ch1/Welcome1

解决办法:
set classpath=%classpath%;.
或者
[your home]>java –classpath . examples.ch1.Welcome1

 

 


11 Java编译小窍门
命令行:javac *.java
可以编译当前目录下所有的.java文件

命令行:javac yourpackage/*.java
编译yourpackage目录下所有的.java文件

 

 

12 打印笑脸
之所以介绍这个,本意是想让同学学会思考,善于和以前学过的知识点比较。再就是理解类型转换。

 

C语言
int main(int argc, char* argv[])
{
 for(int i=0;i<99;i++)
 {
       printf("%d %c/n",i,i);
 } 
 return 0;
}

 

Java
class Test
{
 public static void main(String[] args)
 {
  for (int i=0;i<99;i++)
  {
   System.out.println((char)i);
  }
 }
}

 


13 数据输入

可以调用下列方法,等待用户从键盘输入数据:
  hasNextByte() hasNextInt()  ……
reader对象可以调用下列方法,读取输入的各种数据:
  nextByte() nextInt() nextShort() nextLong ……
注意: Scanner类在java.util包中

练习
学习System,Scanner类的JavaDoc。
从键盘输入10个不同类型(三种以上)的数值,用空格分割,要求按以下格式输出:
Value 1:  <Value1>
value 2: <value2>
……
Value 10: <value3>
Total Sum = <value count>

import java.util.Scanner;

public class CompareTwoNumbers
{
  public CompareTwoNumbers()
  {
    System.out.println("请输入两个数字:");
    Scanner scan=new Scanner(System.in);
    int a=scan.nextInt();
    int b=scan.nextInt();
    if(a-b>0)
       {System.out.println("较大的数是: "+a );}
       else if(a-b<0)
           {System.out.println("较大的数是: "+b );}
           else
            {System.out.println("两个数相等 ");}
  }
  public static void main(String args[])
  {
    CompareTwoNumbers ct=new CompareTwoNumbers();
    System.exit(0);
  }
}

 

数据输出
System.out.print()
System.out.println()

System.out.printf(格式控制,表达式);
  格式控制由格式控制符号和普通字符组成[原样输出]
  %d  输出整型数据
    %md  输出整型数据占m列
  %c  输出字符数据
  %f   输出浮点数据,小数最多保留6位
    %m.nf 输出浮点数据占m列,小数保留n位
  %s  输出字符串数据

int i=10;
System.out.println('a'+i); //?
System.out.println(' '+'a'+i); //?
System.out.println(" "+'a'+i); //?

int i=10;
double d=10.10;
System.out.printf("i=%5d%nd=%5.2f",i,d);


14 如何查看JDK源码
学会研究源码

C:/Program Files/Java/jdk1.6.0_10/src.zip  (路径根据你本机情况而定)解压就可以看了。

 

15 如何确认用哪个java?
你会自己设计一些小实验吗?

右键点击C盘,选择 搜索java.exe 。发现有好几个。将他们剪切下来放到另外的文件夹下(做好标记,实验验证后要放回去),之后在CMD下输入java ,逐个将刚才剪切下来的java放回原位,再在CMD下输入java。观察结果,你能得出什么结论呢?



16 Java 文件名与类名(书中没有说得很清楚)
         一个 .java 文件,可以有多个类,但是文件名只能有一个。javac 进行编译的时候,最终会生成多个 .class 文件,每一个类对应个 .class 文件。运行时运行对应的 .class 文件。

       当类被 public 修饰时,此时文件名必须和该类保持一致(例如 public class A{} 只能放在A.java 文件中,不然在用 javac 编译时会提示错误:类 A 是公共的,应在名为 A.java 的文件中声明)。

        在同一个 .java 文件中,不应该出现2个或2个以上的 public class 。如果有一个public class 类,就应该让文件名和此类名相同;如果没有,即所有的 class 都没有修饰符,那么可以给该文件随便起名字,甚至可以不和任意一个类同名,哪怕是汉字名称都可以,但是后缀还是要有.java 的。main 方法只是程序的一个入口。可以在所有类里都写上 main 方法,给程序提供N多个入口。

       运行程序的时候也只能从其中的一个入口进去,这就是 main 的作用( 程序入口 )。在做单元测试时,会每个类里面添加 main 方法,从而能方便测试。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值