1.String类和StringBuffer类
它们都是处理字符串的类,但是它们有一个最大的区别,那就是,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的值已改变.
2.位逻辑与条件逻辑
首先声明, 为了与位逻辑更好区分开来,我把通常所说的逻辑取了个别名叫做条件逻辑.
它们都有各自的操作符,位逻辑操作符有:&(与运算),^(异或运算),|(或运算);条件逻辑操作符有:&&(并
且),||(或者).
位逻辑运算通常是针对两个数而言,实行位操作;而条件逻辑运算是针对两个条件表达式而言,实行条件操
作.其实,位逻辑操作符一样可以实现条件操作,但是此时有一个重要的区别:用位操作符时,不管操作符两边的
条件表达式成不成立,它都要通通进行运算判断,而条件逻辑操作符不一样了,如果通过左侧的操作数就可以进
行它们需要的判断,那么它就不会再计算右侧的操作数了,这种情况叫短路.废话少说!且看下例.
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
结果分析:
我想不用我分析了,你应该懂了吧.
3.实例变量与类变量
可以通过两种方法在类中存储数据───作为实例变量和类变量.实例变量是特定于对象的,如果你有两个对
象(即一个类的两个实例),每一个对象中的实例变量独立于另一个对象中的实例变量的;另一方面,两个对象的
类变量均指向相同的数据,并因此面保存相同的值,换句话说,类变量被类中的所有对象共享.差点忘了,它们在
形式上的区别,类变量在声明时比实例变量多一个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的类变量均指向相同的数据,所有值一
样,这就是类变量的作用.
4.实例方法,类方法,构造器方法
我们通常所说的方法系指实例方法,就像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());/*通过传递参数调用构造器新建一
个对象,再通过对象调用方法得到数据*/
}
}
5.接口与类
类是对一类特定对象的规格说明,我们可以类定义创建对象,通过创建对象来组合所有属于该类的组件,而
接口不能这样做.而接口实质上就是一个常量和抽象方法的集合,要使用一个接口,就需要在类中实现这个接
口,然后作为类定义的一部分,编写接口中声明的每一个方法,接口中的方法永远是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(){}
}
//在类中必须实现接口中声明的所有方法.(当然也可不必,但是要用到适配器类或用抽象类)
分享到:
相关推荐
【Java初学者福音】 在Java学习的初期,掌握一些核心概念和最佳实践是至关重要的。以下将详述几个关键知识点,帮助你扎实基础,避免常见错误。 1. 面向对象的设计法则: 面向对象编程(OOP)是Java的核心。一些...
选择JAVA混淆编译工具时,应考虑以下几个因素: - **项目规模**:大型项目可能需要更复杂的混淆策略。 - **安全性需求**:根据项目的敏感程度选择不同级别的工具。 - **许可证类型**:开源项目应选择符合GPL等开源...
首先,Java 框架的配置文件较为复杂,初学者在面对其时容易产生混淆、困惑。例如,在使用 Spring 框架的配置文件时,需要将其他两个 Java 框架进行有机的结合,这会使初学者感到困惑,从而影响软件的开发。 其次,...
### 给C++初学者的忠告 #### 1. C++是一门复杂的语言 - **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中...
在Android应用开发中,安全和反编译是一个重要的议题,特别是对于那些包含敏感代码或商业逻辑的应用来说。"Android-混淆分享"项目提供了一个...无论是初学者还是经验丰富的开发者,这个资源都将是一份宝贵的参考资料。
对于初学者或者不熟悉复杂命令行工具的开发者来说,这样的工具尤其受欢迎,因为它降低了使用反编译技术的门槛。 标签“JAVA 反编译 工具”进一步明确了主题,强调了该工具与Java编程语言及其反编译过程密切相关,...
Java编程语言是世界上最流行的开发平台之一,广泛应用于企业级应用、移动应用...通过以上知识点的学习和实践,Java初学者可以逐步消除学习过程中的困惑,加深对Java语言的理解,并为更高级的编程概念打下坚实的基础。
所以当时在cryptopp的基础上做了一些封装,并且将RSA,AES,SHA1,RSA-SHA1 Sign分离成独立的类,并且添加了Base16和Base64编码算法,使用这几个加密算法,几乎可以解决一般项目对通信安全的需要。 Java部分使用了JDK...
2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式...
本文将深入探讨几个常见的问题,以帮助初学者更好地理解和使用Java。 1. **内存管理与垃圾回收**:Java引入了自动内存管理机制,即垃圾回收(Garbage Collection)。初学者可能会对何时以及如何进行垃圾回收感到...
Java的设计理念是简洁和可维护,但初学者往往觉得其冗长的类库和繁琐的注解令人望而生畏。理解Java的核心概念,如封装、继承和多态,以及合理选择和运用框架,可以帮助开发者减少困惑。 其次,忽视性能优化是另一个...
这份文档可能涵盖了以下几个方面: 1. **KNN算法原理**:解释了KNN的基本概念,包括K值的选择、距离度量方法、邻居的选择策略(如使用最近邻或加权最近邻)、处理类别不平衡的方法等。 2. **数据预处理**:KNN算法...
在Java中,生成验证码通常涉及以下几个步骤: 1. **生成随机字符串**:使用`Random`类或者更安全的`SecureRandom`类生成随机数字和字母的组合。可以设置字符串长度,字符集(包括大小写字母和数字)。 2. **绘制...
对于初学者来说,了解反编译原理和工具可以帮助他们更好地理解Java运行机制,并在遇到没有源码的库时找到解决问题的途径。同时,开发者也可以利用这些工具来保护自己的代码,通过混淆和加密等手段增加反编译的难度。...
Luyten的用户界面现代化,对初学者和专业开发者都非常友好。 使用这些反编译工具有时可能无法完全恢复原始的源代码格式,因为编译过程会丢失一些元数据,例如原始的行号和某些特定的编程结构。然而,它们通常能提供...
总的来说,"javadecompiler.7z"这个压缩包提供了一个方便的Java反编译解决方案,无论是对于初学者还是经验丰富的开发者,都能在理解和分析字节码时派上用场。正确使用这类工具,可以增强我们的开发能力,提高问题...
│ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...
在Java反编译工具的世界里,有几个著名的免费选项,如JAD、JD-GUI和 FernFlower。JAD 是一个命令行工具,它可以将.class文件转换为可读的Java源代码。对于初学者来说,可能更倾向于使用JD-GUI,因为它提供了一个图形...