一、一个JAVA类文件中只能有一个public类吗?

01-JAVA语言基础.ppt第22页“一个Java源文件中可以写多个类,但其中只能有一个类是“公有(public)”的,并且Java要求源文件名也要与之一致。”

测试代码一:

 //错误示例
public class Test {
public static void main(String[] args) { }
}
public class Test1{ }

测试结果:

(公有类TestTwo必须定义在它自己的类文件中)

结论:所以,一个类文件只能有一个public类。

测试代码二:

 public class Test {
public static void main(String[] args) { }
public class innerClass{ }
}

测试结果:

(编译通过)

其中innerClass为Test内部类。

通过查找资料得知:

  内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰。(来源:Java内部类详解

结论:

  • java源文件中直接定义的public类只能有一个,且该类名必须与源文件名一致。
  • 内部类可以理解为外部类的一个成员,成员可以用public修饰。

二、main方法的声明

java规定main方法必须严格按如下形式进行声明:public static void main( String args[] )

void表明其不反回任何结果。

如果将其改为int,并添加return 0:

 //错误示例
public class Test {
public static int main(String[] args) {
return 0;
}
}

测试结果:

  

结论:main方法必须严格按如下形式进行声明:public static void main( String args[] )。

三、在一个对话框中显示文本

程序代码:

 import javax.swing.JOptionPane;
public class Dialog {
public static void main(String[] args) {
String text = "Welcom\nto\nJAVA\nProgramming!";
JOptionPane.showMessageDialog(null,text);
}
}

执行结果:

四、为什么java规定作为程序入口点的main() 方法是静态的?

静态方法与非静态方法本质区别:

  静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存。

  所以,非静态成员函数在执行前必须先构造并实例化该函数所在的类。若main为非静态方法,则调用它之前还须实例化main所在类。而main为程序入口点,为此,JAVA语言规定main为静态。

五、main接收命令行参数练习

测试代码:

 public class JavaAppArguments {
public static void main(String[] args){
int n = args.length;
System.out.println("参数个数:" + n);
while(n > 0){
System.out.println(args[--n]);
}
}
}

执行结果:

  

程序分析:通过命令行运行JavaAppArguments时将参数传给了String数组args,main函数使用这个数组实现输出。

六、变量的作用域与同名变量屏蔽原则:

变量的作用域:在每个大括号内定义的变量,只在它被定义后、所在大括号结束之前有效,这个区域成为变量作用域。

测试代码一:

 //如果在变量作用域内定义同名变量
public class Scope {
public static void main(String[] args) {
int x;
{
int x; //报错
}
}
}

错误信息为Duplicate local variable x (重复定义变量x)

测试代码二:

//在变量作用域外定义同名变量
public class Scope {
public static void main(String[] args) {
{
int x = 1;
System.out.println(x);
}
int x = 2;
System.out.println(x);
}
}

执行结果:

结果分析:

  输入第一个大括号内的x值1之后,变量x被JVM回收,于是可以再次以x为变量名定义变量。

测试代码三:

 public class Scope {
static int x = 3;
public static void main(String[] args) {
{
int x = 1;
System.out.println(x);
}
int x = 2;
System.out.println(x);
f();
}
public static void f(){
System.out.println(x);
}
}

执行结果:

结论:

  1.相同名称的局部变量作用域范围不可重叠。

  2.在同一作用域范围内下成员变量名可以和局部变量同名,在同一个作用域范围下局部变量和局部变量不可以同名。

  3.当成员变量与局部变量同名时,默认使用局部变量

参考文章:http://www.cnblogs.com/AlanLee/p/6627949.html

七、浮点数误差

测试代码:

 public class TestDouble {
public static void main(String[] args) {
System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
System.out.println("4.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}

执行结果:

  

原因分析:

  浮点数值采用二进制系统表示,而在二进制系统中无法精确表示1/10。这就好像十进制无法精确表示1/3一样。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类.(摘自“Java 核心技术 卷一 (第九版)  p35”)

八、处理精度损失

测试代码一:

 import java.math.BigDecimal;

 public class TestBigDecimal {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("10.123");
BigDecimal num2 = new BigDecimal("20.456");
System.out.println(num1.add(num2));
}
}

执行结果:

  

测试代码二:

 import java.math.BigDecimal;

 public class TestBigDecimal {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal(10.123);
BigDecimal num2 = new BigDecimal(20.456);
System.out.println(num1.add(num2));
}
}

执行结果:

  

原因分析:

  因在计算机中浮点数值采用二进制形式存储,浮点数10.123、20.456无法精确存储,所以其为参数构造出的num1、num2也是近似值,因此得到了不精确的结果。

  而字符串的值是确定的,BigDecimal使用字符串来处理、存储数据,得到的结果是精确的。

总结:

  在构建BigDecimal对象时应使用字符串而不是数值。

九、自动类型转换

测试代码:

 public class XY {
public static void main(String[] args) {
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
}
}

执行结果:

  

结果分析:

  “+”号运算顺序为从左向右,当“+”连接两个操作数其中有一个是字符串时,“+”为字符串连接操作符。

  当“+”连接一个数值和一个字符串时,数值会自动转换为字符串进行连接。

01-JAVA语言基础(动手动脑)的更多相关文章

  1. java第二节课 java语法基础动手动脑

    动手动脑1:枚举变量   运行EnumTest.java package test2; public class EnumTest {  public static void main(String[ ...

  2. java语言课堂动手动脑

    1 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是 ...

  3. java语法基础--动手动脑问题及课后实验问题

    ---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...

  4. Java语法基础动手动脑

    仔细阅读示例:EnumTest.Java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗? EnumTest.java public class EnumTest { pub ...

  5. Java语法基础动手动脑实践

    输出结果为: 0.05+0.01=0.0600000000000000051.0-0.42=0.58000000000000014.015*100401.49999999999994123.3/100 ...

  6. 01.JAVA语言基础相关解答

    1.首先,第一个问题谈到一个java类文件中真的只能有一个公有类吗?并给出了以下代码.可以看出这个程序里有两个public类: 我进行了不同的调试:                           ...

  7. 【Java初探实例篇01】——Java语言基础

    示例系列,将对每节知识辅以实际代码示例,通过代码实际编写,来深入学习和巩固学习的知识点. IDE:intellij IDEA: 语言:Java 本次示例:Java语言基础知识的应用. 创建包day_4 ...

  8. day01<计算机基础知识&Java语言基础>

    计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...

  9. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

  10. JAVA 数组作业——动手动脑以及课后实验性问题

    JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...

随机推荐

  1. Python结束当前运行的代码

    import sys print(0) print(1) print(2) # 到此结束运行 sys.exit() # 已结束,以下不会执行 print(4) print(5)

  2. Nuxt 环境搭建已经编写第一个Nuxt应用

    在学习Nuxt 之前 首先我们要有node ,然后因为Nuxt 是一个基于 Vue.js 的轻量级应用框架,所以在开发之前需要安装(后面纯属作者猜想并且猜想就是这个原因...) npm install ...

  3. py1

    python 下载安装  https://python.org python解释性语言 python数据结构 *输入输出 print(12,34,56,end='',sep='*') input() ...

  4. IIS-7.5 第一次加载慢的 解决办法

    问题焦点 Win2008R2,Win7 下面IIS部署的.NET站点第一次加载比较慢. 解决办法: 1.基本原理: 在第一个请求到达之前加载Web应用程序,从而提高其网站的响应性.通过主动加载和初始化 ...

  5. Flask笔记1

    Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...

  6. python 读取一个文件夹下的所jpg文件保存到txt中

    最近需要使用统计一个目录下的所有文件,使用python比较方便,就整理了一下代码. import os def gci(filepath): files = os.listdir(filepath) ...

  7. 【PAT甲级】1078 Hashing (25 分)(哈希表二次探测法)

    题意: 输入两个正整数M和N(M<=10000,N<=M)表示哈希表的最大长度和插入的元素个数.如果M不是一个素数,把它变成大于M的最小素数,接着输入N个元素,输出它们在哈希表中的位置(从 ...

  8. VS中消除ANSI API警告

    最近在VS上写网络程序遇到许多问题,因为VS中将许多ANSI中的API都重写了,那些API大多有漏洞或不能支持现在的一些编程需求了,所以在VS中使用会因为警告而不能用. 但一些老API用着比较方便,了 ...

  9. mysql 多次分组查询 数据最大的一行

    SELECT B, D, Max(E)FROM `总表`WHERE B = '张士建'GROUP BY B, D 通过查询创建工具 编写查询语句

  10. rf 环境

    googlechrome webdriver驱动下载 addrhttps://sites.google.com/a/chromium.org/chromedriver/downloads谷歌浏览器ap ...