java初学者要搞清

初学

1。实例方法,类方法,构造器方法

  我们通常所说的方法系指实例方法,就像c语言中的函数一样,其具体方法我就不用说了,在这里我主要是用它来区分类方法和构造器方法.类方法与实例方法最大的区别是:在形式上类方法多一个static,在用法上, 不必创建对象就可直接调用类方法(而实例方法却一定要先创建对象,再通过对象调用)。

  eg:

class add
{
static int addem(int op1,int op2)
{
return op1+op2;
}
}
public class xxf
{
public static void main(String[] args)
{
System.out.println("addem(2,2)="+add.addem(2,2));
} //直接用类名作为对象调用类方法
}

  注: 也可按通常的方法,即先创建对象,再调用方法,不过,这时static就无任何意义了。

  再说说构造器方法,它是用来初始化对象中的数据的一种方法,创建很容易,只需在类中加上一个与这个类同名的方法,不需要在前面加任何访问说明符或者返回类型,另外,构造器也一样可以向方法一样传递参数.

  eg:

class data
{
private String data1;//事先声明

data(String s)
{
data1=s; /*通过接收数据来初始化变量.(注:不能在构造器内
声明变量,事先在外就要声明.)*/
}

public String getdata()
{
return data1;
}
}

public class xxf
{
public static void main(String[] args)
{
System.out.println((new data("I love you")).getdata());/*通过传递参数调用构造器新建一
个对象,再通过对象调用方法得到数据*/
}
}

2。接口与类

  类是对一类特定对象的规格说明,我们可以类定义创建对象,通过创建对象来组合所有属于该类的组件,而接口不能这样做.而接口实质上就是一个常量和抽象方法的集合,要使用一个接口,就需要在类中实现这个接口,然后作为类定义的一部分,编写接口中声明的每一个方法,接口中的方法永远是public,abstract,接口中的常量永远是public static和final,因此不需要为它们说明属性。

  因为在Java中不支持多重继承,但是,可以用接口来实现类似的功能,这是接口的重要作用之一。

  eg:

interface anyone //定义一个接口
{
final double PI=3.1416;
void setNumber(int number);
int getNumber();
}
interface anyother //定义另一个接口
{
void setString(String str);
String getString();
}

class xxf implement anyone,anyother //定义一个类,并使用两个接口
{
int number;
String str;
public xxf(){}
void setNumber(int number)
{
this.number=number;
}
void setString(String str)
{
this.str=str;
}
void int getNumber(){}//可以为一个空实现.
void String getString(){}
}
//在类中必须实现接口中声明的所有方法.(当然也可不必,但是要用到适配器类或用抽象类)

3。String类和StringBuffer类

  它们都是处理字符串的类,但是它们有一个最大的区别,那就是。

  eg1:

......
//omit some code
String s1="You are hired!";
System.out.println(s1.replace(′h′,′f′));//用f把字串中的h替换了
System.out.println(s1);
......
//omit some code

  运行结果:

   You are fired!
   You are hired!

  结果分析:

  从结果,明显可知,s1的值并没有被改变,而第一行结果只是屏幕内容的替换.

  eg2:

......
//omit some code
StringBuffer s2=new StringBuffer("Hello from Java!");
s2.replace(6,10,"to");
System.out.println(s2);
......
//omit some code

  运行结果:

  Hello to Java!

  结果分析:

  显然,s2的值已改变.
 
4。位逻辑与条件逻辑

  首先声明, 为了与位逻辑更好区分开来,我把通常所说的逻辑取了个别名叫做条件逻辑.

  它们都有各自的操作符,位逻辑操作符有:&(与运算),^(异或运算),|(或运算);条件逻辑操作符有:&&(并
且),||(或者)。

  位逻辑运算通常是针对两个数而言,实行位操作;而条件逻辑运算是针对两个条件表达式而言,实行条件操作.其实,位逻辑操作符一样可以实现条件操作,但是此时有一个重要的区别:用位操作符时,不管操作符两边的条件表达式成不成立,它都要通通进行运算判断,而条件逻辑操作符不一样了,如果通过左侧的操作数就可以进行它们需要的判断,那么它就不会再计算右侧的操作数了,这种情况叫短路.废话少说!且看下例.

  eg1:

......
//omit some code
double value=0;
if(value!=0 && 1/value<1000){
System.out.println("The value is not too small.");
}
else{
System.out.println("The value is too small.");
}
......
//omit some code

  运行结果:

  The value is too small.

  结果分析:

  照理说应会出现除数为0的错误,但是我刚才说了,由于条件逻辑操作符是短路操作符,显然,value!=0不成立,立即就可作出判断应执行else后的语句,所以它就不再会运算判断1/value<1000了.如果不懂请再看一
例:

   eg2:

......
//omit some code
double int1=0,int2=1,int3=1;
if(int1!=0 & (int2=2)==1){}
System.out.println("int2="+int2);
if(int1!=0 && (int3=2)==1){}
System.out.println("int3="+int3);
......
//omit some code

  运行结果:

   int2=2.0
   int3=1.0

  结果分析:

  我想不用我分析了,你应该懂了吧.

5。实例变量与类变量

  可以通过两种方法在类中存储数据───作为实例变量和类变量.实例变量是特定于对象的,如果你有两个对象(即一个类的两个实例),每一个对象中的实例变量独立于另一个对象中的实例变量的;另一方面,两个对象的类变量均指向相同的数据,并因此面保存相同的值,换句话说,类变量被类中的所有对象共享.差点忘了,它们在形式上的区别,类变量在声明时比实例变量多一个static.

  eg:

class data
{
public int intdata=0;//显然,intdata在这儿是实例变量
}
public class exam
{
public static void main(String[] args)
{
data a,b;
a=new data();
b=new data();
a.intdata=1;
System.out.println("b.indata="+b.intdata);
}
}

  运行结果:

  b.intdata=0

  结果分析:

  可以看出,a.intdata的值虽然变了,但并没有影响b.intdata.但是如果在data类中声明intdata时,在其前面加上static就变成类变量了(即:public static int intdata=0;),则此时运行结果会变为:

  b.intdata=1

  这次a.intdata值的改变可把b.intdata影响了,事实上,对象a和b的类变量均指向相同的数据,所有值一样,这就是类变量的作用。

时间: 2024-09-28 06:09:37

java初学者要搞清的相关文章

Java初学者入门需掌握的30个基本概念

初学|概念 基本概念 1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率. 2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance). 3.封装:就是把数据和行为

java类的问题-JAVA初学者,学了,if while for 了,有个人想知道,一年之内一对兔子能繁殖多少对?

问题描述 JAVA初学者,学了,if while for 了,有个人想知道,一年之内一对兔子能繁殖多少对? 有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面.已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子.假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?(提示:斐波那契数列)顺便说下思路数!感谢> 解决方案 兔子的规律为数列,1,1,2,3,5,8,13,21?public?class?Fobonacc

java初学者求教:关于线程安全问题

问题描述 java初学者求教:关于线程安全问题 List list = new ArrayList(); list = Collections.synchronizedList(list); 这时list是线程安全的,那么当我用增强for循环遍历list, 并且使用list的remove方法时,是不是就不安全了? 另外,如果list集合中存放的是一些带有图片的对象,比如dog public void paintTest(Graphisc g){ for(dog d:list){ g.drawIm

求助大神帮忙 在线等-JAVA初学者的提问?在线等!

问题描述 JAVA初学者的提问?在线等! 这三个表之间有什么关系 解决方案 ......... 能有什么关系啊. 瞬间觉得你提问是不是没有这么简单. 解决方案二: 哦,原来没有关系啊!我一直在找有什关系呢?看来我想多了 解决方案三: 第2张表的BILLID是第1张表主键的外键,第2张表的SUPPLIERID是第3张表主键的外键 解决方案四: 主外键关联的关系啊,US表中.useid是主键,另外两个id字段是关联的外键,通过主外键关联的关系可以实现通过一张表的数据查询到相关联的另外一张表的数据,实

我是java初学者,大神帮忙解答我写的递归函数哪里错了?

问题描述 我是java初学者,大神帮忙解答我写的递归函数哪里错了? package com.jian.action; public class Action { static int count = 0,i=0; public static void digui(String num){ char[] num1 = num.toCharArray(); if(count<num1.length-1){ if (num1[i]=='a') { count++; }i++; System.out.p

java初学者,求大神指点

问题描述 java初学者,求大神指点 int i = 0:int sum:while(i<100) { sum =i; sum+=i; i++; }System.out.println(sum); 这是主方法里面运行的代码,错误信息提示输出行的sum未初始化,我不太懂,为什么,求高手指点 解决方案 给sum赋值就ok了 解决方案二: 赋初值:int sum = 0; 解决方案三: sum是局部变量吧,如果是全局变量的话就不用赋初值,会有默认值的,但是 局部变量在使用前必须初始化或者赋值 解决方案

java初学者 为什么两个格式相同的代码编译出来结果不同求大神指导

问题描述 java初学者 为什么两个格式相同的代码编译出来结果不同求大神指导 import java.util.*; public class a { public static void main(String[] args){ Scanner in=new Scanner(System .in); System.out.println("请出拳"); System.out.println("请选择: 1剪刀 2石头 3布"); int a=in.nextInt(

java初学者,求教!!!!!!!11

问题描述 java初学者,求教!!!!!!!11 题目描述 每门课的成绩分为A.B.C.D.F五个等级,为了计算平均绩点,规定A.B.C.D.F分别代表4分.3分.2分.1分.0分. 输入格式 有多组测试样例.每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔. 输出 每组输出结果占一行.如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数.否则,输出"Unknown". 样例输入 A B C D F B F F C C A D C

java代码-java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的?

问题描述 java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的? class Demo03 { public static void main(String[] args) { A.show(); } } class A { //构造方法 A(){ System.out.println("构造方法执行"); System.out.println(b); System.out.println(c); } static A a=new A(); sta