【java】基础问题

1.在Java 的DOC中,Java中每个类都有一个Field Summary 中的Field是什么意思啊?

sun 的DOC里的 Field 指的既是类变量,也是实例变量
package test;

public class Test
{
 static int num=0;   //类变量,有static修饰,值在整个类中有效
 String name;        //实例变量,值仅在实例化后的对象中起作用
 int id;             //实例变量,值仅在实例化后的对象中起作用
 Test(String inName,int inId)
 {
  name=inName;
  id=inId;
  num++;
  }
 void display()
 {
  System.out.println(name);
  System.out.println(id);
  System.out.println(num);
 }
 public static void main(String[] args)
 {
  Test test1=new Test("J2SE",100);
  test1.display();
  Test test2=new Test("J2EE",200);
  test2.display();
 }
}
/*那么从这个例子可以看到类变量(Field)和实例变量的区别,类变量num统计了类一共实例化了几个对象(程序里是两个),它在任何对象中都起作用,而实例变量name和id只能在它们自己的对象里起作用
再举个JAVA基础类的例子: 类java.awt.Color 类有许多Field Summary,其中就有
public static final Color white,这样white就是Color类的一个类变量,可以在任何Color对象里用Color.white来使用此类变量*/

2.Swing中的getContentPane()方法

在过去的J2SE版本中,部件(components)不能直接添加到最高级(top level)的Swing容器,这些容器包括:JFrame, JDialog, JWindow, JApplet和JInternalFrame. 例如现在有一个JFrame的instance命名为aFrame。 我们要添加一个命名为aComponent的部件(比如一个JPanel)到JFrame里。以往我们需要调用JFrame的getContentPane()办法。如下:


    aFrame.getContentPane().add(aComponent) 


      在J2SE5.0中,我们可以直接添加部件到最高级的Swing容器,也可以直接在容器内设置布局管理(Layout Manager)和删除部件。这个变化允许我们可以省去调用getContentPane()而直接在容器内应用add(),setLayout()和remove()。然而,我们还是不能忽略了ContentPane,即使我们可能将不会再使用ContentPane来添加部件到容器。 

        先看一个我们以往在J2SE1.4及其以前的版本经常应用到的例子。我们要设置一个JFrame的布局管理而且添加一些部件到该JFrame。查看api关于JFrame的文件可以发现, JFrame从java.awt.Container继承了add()办法. 该add()是用来添加一个部件到JFrame容器. Container类里也包含setLayout()办法, 该setLayout()是用来设置继承者(比如上面的JFrame容器)的布局管理。

package test;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.Color;
public class Test extends JFrame {
//注意在1.4及其以前版本中可以编译,但是运行有问题
//5.0版本运行正常
  Test(){
    super("Test");
    setBackground(Color.BLACK);
    setLayout(new GridLayout(6,6,2,2));  // 1.4中问题 1
    
    //虽然已经将Jframe框架进行分割,但是最终展示颜色还是还是需要Jpanel作为画布
//    当然你可以使用Jcomponent的子类作为画布类,但是这样存在一定的问题,当它需要在画布上布置背景色的时候,就必须写绘制背景色的代码
//    而不是简单的使用setBackground(Color color)方法
    
    for ( int i=0;i<36; i++){
      JPanel jPanel = new JPanel();
      jPanel.setBackground(new Color (
             (int)(Math.random()*16777215)));
      add(jPanel);                      // 1.4中问题 2
    }
    setSize(400,400);
    setVisible(true);
  }
  public static void main(String[] args){
    new Test();
  }
}

3.toString()方法

toString()方法就是把对象转换成String类型,转换的算法根据类型和实际需要而定。

比如一个Integer对象的toString方法就是把这个对象表示的整数转化成字符串,133就成了"133"。

也有根据实际需要来定toString方法的,比如一个Person类:
class Person {
String firstName;
String familyName;
...
}
你可以写一个toString方法,它可以把Person的对象转换成familyName字符串,或者转换成firstName + familyName的字符串。

=======================
package test;

class Person {
	private String name = null;
	private int age = 0;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String toString() {
		return name;
	}
}

public class Test {
	public static void main(String[] args) {
		Person p = new Person("Jack", 20);
		System.out.println(p);// 这时会输出"Jack".
	}
} 

4.public static void main(String[] args)中String[] args与String args[]区别,以及它的作用

String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数。java 本身不存在不带String args[]的main函数,java程序中去掉String args[]会出现错误。
建个test类 在cmd中运行时输入java test a b c,并且在你的main函数里面加这段话:System.out.println("arg is"+args[0]+" "+args[1]+" "+args[2]),然后看看输出是什么?
是不是:
This is a simple Java program
arg is a b c
***********test.java*******************
public class test {
public static void main(String[] args) {
System.out.println("This a java program!");
System.out.println("arg is"+args[0]+" "+args[1]+" "+args[2]);
}
}
********cmd*****************
C:\>javac test.java
C:\>java test a b c
This a java program!
arg isa b c


String args[] String[] args有什么区别 

其实没什么区别的;当初我也是这样的疑问,呵呵;
非要说区别就看下面:
执行效果上没有不同, 但在语法意义上略有不同.
比如, StringString[], 前者叫字符串类型而后者叫字符串数组类型.
String args[]
单从类型上来讲属于字符串类型, 而从变量本身来讲是一个数组类型, 因此组合起来说明此变量为一个字符串类型的数组, 也就是说数组中的所有元素都为String类型.
String[] args
单从类型上来讲属于字符串数组类型, 而从变量本身来讲就是一个单纯的引用变量, 因此这种方式可以更明显地体现出是否为数组这一点. 因为从类型上就可以直接看出变量为一数组类型引用.

正如第一句话所说的那样, 单单两句是比较不出什么不同的, 但如果你这样写.
String args[], argt;
String[] args, argt;
这就有很显示的差异了. 在第一句中args是字符串数组类型, argt则就是字符串变量. 在第二句中argsargt都是字符串数组类型.

那就是:string[] args,声明一个String数组,名字叫args. stringargs[],声明一个叫args的数组,类型是String.

其实功能作用是完全一样的,两种写法都可以!

这是数组的两种写法,
大多数程序员喜欢使用String[] args这种风格的写法,因为它把元素类型String[] 与变量名 清晰的分开了。
不过个人习惯于String[] args

main(Stringargs[]) 中的 args 为一个 String 数组 , 装着程序运行时获得的参数
参数个数就是数组元素个数 args.length;
第一个参数 -- args[0]
第二个参数 -- args[1]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值