一、一个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. poj 3057(bfs+二分匹配)

    题目链接:http://poj.org/problem?id=3057 题目大概意思是有一块区域组成的房间,房间的边缘有门和墙壁,'X'代表墙壁,'D'代表门,房间内部的' . '代表空区域,每个空区 ...

  2. bugku 求getshell

    要修改三个地方 根据大佬们的writeup,要修改三个地方: 1.扩展名filename 2.filename下面一行的Content-Type:image/jpeg 3.最最最重要的是请求头里的Co ...

  3. Codeforces Round #598 (Div. 3) F. Equalizing Two Strings

    You are given two strings ss and tt both of length nn and both consisting of lowercase Latin letters ...

  4. 吴裕雄 python 机器学习——数据预处理标准化MinMaxScaler模型

    from sklearn.preprocessing import MinMaxScaler #数据预处理标准化MinMaxScaler模型 def test_MinMaxScaler(): X=[[ ...

  5. ALSA driver--Asoc

    https://blog.csdn.net/zyuanyun/article/details/59170418 ALSA Asoc框架如下图: Asoc分为machine,platform,codec ...

  6. Python格式化字符串知多少

    字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换.如一句问候语: ...

  7. angular2 单元测试 路由相关

    第一步:在html模板中,写路由链接,并保证有路由出口 第二步:写自定义的路由指令和路由出口组件,因为在单元测试中不需要引入真实的路由,此处我们用虚拟的代替即可. 第三步:将自定义的虚拟路由指令和路由 ...

  8. java.lang.NoSuchMethodException: com.sun.tools.javac.util.List.<init>()

    主要原因是import jar包的时候import java.util.List;这个,导致错误

  9. tensorflow之tensorboard

    参考https://www.cnblogs.com/felixwang2/p/9184344.html 边学习,边练习 # https://www.cnblogs.com/felixwang2/p/9 ...

  10. javaweb项目运转流程

    做web项目,不仅要会做,还需要了解其工作流程,为什么这么做!这些知道了.其他的都是渣渣.上图!对于web 项目了解他的运行流程之后,基本其他的都不是问题.web项目还是很简单的 这是简化的开发时常用 ...