Java认识对象
一、类与对象
java中有基本类型和类类型两个类型系统。Java撰写程序几乎都在使用对象,要产生对象必须先定义类,类是对象的设计图,对象是类的实例
1.定义类
类定义使用的关键词为class,建立实例的使用关键词new。在下面的代码中定义了两个类,一个是公开的Field类所以文档的主文档名必须是Field,另一个是非公开的的类Clothes。一个原始码中可以有多个类定义但是只能有一个公开类,主文档名称必须与公开类名称相同。只要有一个类就会产生一个字节码文档。所以下面代码编译会有两个字节码文档。
class Clothes{
String color;
char Size;
clothes(String color,char Size){//构造函数是与类同名称的方法
this.color=color;
this.Size=size
}
}
public class Field{
public static void main(String[] args) {
Clothes sun=new Clothes();
Clothes spring=new Clothes();
Clothes sun1=new Clothes("red",'M');//使用指定的构造函数建立对象
Clothes spring1=new Clothes("yellow",'L');
sun.color="red";
sun.Size='S';
spring.color="green";
spring.Size='M';
}
}
2.使用标准类
1.使用Java.util.Scanner
scanner实例会帮你扫描标准输入。nextInt方法会看在标准输入中有没有下一个字符串(以空格会换行分隔),有的话尝试剖析为int类型。Scanner对应每个基本类型都有nextXxx()方法,如果直接去的下一个字符串用next()(以空格或换行分隔),如果想去取得一整行文字则用nextLine()(以换行分隔)
import java.util.Scanner;//告诉编译程序接下来你想偷懒不想每次都输入java.util.Scanner public class guess {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);//建立Scanner实例必须传入java.io.InputStream的实例,System.in就是一种InputStream
int number=(int)(Math.random()*10);
int guess;
do {
System.out.println("猜数字(0~9):");
guess=scanner.nextInt();//取得下一个整数
}while(guess!=number);
System.out.println("猜对了");
} }
2.使用java.math.BigDecimal
1.0-0.8!=0.2为什么呢?原因是Java(包括其他程序语言)遵守IEEE754浮点数运算规范,使用分数和指数俩表示浮点数。如0.5使用1/2,0.1使用1/16+1/32+1/256+1/4096+.....无限循环下去,无法精确表示造成运算上的误差。
double a=0.1;
double b=0.2;
if((a+b)=2)
{
System.out.println("等于0.2");
}
else{ System.out.println("不等于0.2");
}//结果是不等于0.2.所以要求精确度,要小心使用浮点数,而且别用==直接比较浮点数运算结果
得到更好精确度的办法如下
BigDecimal op1=new BigDecimal("1.0");
BigDecimal op2=new BigDecimal("0.8");
BigDecimal result=op1.subtract(op2);//BigDecimal提供了plus()、substract()、multiply()、divide()等方法;
System.out.println(result);//结果是等于0.2
BigDecimal op3=new BigDecimal("0.1");
BigDecimal op4=new BigDecimal("0.1");
BigDecimal result1=new BigDecimal("0.2");
if(op3.add(op4).equals(result1)) {
System.out.println("等于0.2");
}else {
System.out.println("不等于0.2"); }
3.对象指定与相等性
对于基本类型的话,=是将值赋给某个变量,==是比较两个变量存储的值是否相等
int a=10;
int b=10;
int c=a;
Syetem.out.println(a==b);//true
Sysytem.out.println(a==c);//true
对于对象的话,=是指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考统一对象
BigDecimal a=new BigDecimal("0.1");
BigDecimal b=new BigDecimal("0.1");
BigDecimal c=a;
System.out.println(a==b);//false;
System.out.println(a==b);//true;
System.out.println(a.equals(b));//true
二、基本类型打包器
1.打包基本类型
基本类型的打包器都归于Java.lang中,在Integer打包int类型数据,方法之一就是用new创建Integer实例传入int类型数据(1)。Integer提供compareTo()方法,可与另外一个Integer比较,如果打包值相同就返回0;小于传入对象的值就返回-1.否则就是1(2)
int data1=10;
int data2=20;
Integer wrapper1=new Integer(data1);//打包基本类型(1)
Integer wrapper2=new Integer(data2);
System.out.println(data1/3);//基本类型运算结果为3
System.out.println(wrapper1.doubleValue()/3);操作打包器的方法结果为3.3333...
System.out.println(wrapper1.compareTo(wrapper2));//(2)
2.自动装箱和拆箱
//自动装箱 法1
Integer data1=10;
Integer data2=20;
System.out.println(data1/3);
System.out.println(data1.doubleValue()/3);
System.out.println(data2.compareTo(data2));
//自动装箱 法2
int i = 30;
Integer data3=i;
//3.14f自动装箱为Float然后指定给number
Number bumber=3.14f;
//自动装箱然后自动拆箱
Integer wrapper=10;
int foo=wrapper;
//运算时也可以自动装箱和拆箱
System.out.println(wrapper+10);
System.out.println(i++);
Boolean f=true;
System.out.println(f&&false);
Integer number = 10;
Integer localInterger = Integer.valueOf(100);//编译程序自动将程序代码展开
Integer i = null;
int j = i;
Integer i1 = 100;
Integer i2 = 100;
if (i1 == i2) {
System.out.println("i1==i2");//结果为i1==i2;
} else {
System.out.println("i1!=i2");
}
Integer i10 = 200;//值不再-128到127范围内所以会新建对象所以不是同一个参考对象。
Integer i20 = 200;
if (i10 == i2) {
System.out.println("i1==i2");
} else {
System.out.println("i1!=i2");//结果为i1!=i2
}
valueOf操作
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
IntegerCache.low=-128;
IntegerCache.high=127;
比较对象的实质内容的值是否相同使用equals;==,!=比较的是参考对象。 三、数组对象
int[] score = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };//静态初始化
int[] arr = new int[10];// java数组必须给定大小,元素是自动初始化的。数组下标为0-9。//动态初始化
int[] arr1=new int[3]{1,2,3};//动态初始化
for (int i = 0; i < score.length; i++) {
System.out.println(score[i]);
}
for (int i : score) {//增强式for循环
System.out.println(score[i]);
}
int[][] scores=new int[5][5];
for (int[] is : scores) {//增强式for循环使得更加的简洁
for (int i : is) {
System.out.println(i);
} }
注意:1.数组变量引用了具体的数组对象;2.数组元素是自动初始化的,自动初始化为零值;3.零值包括:0(整型)、0.0(浮点型)、\u000(char)、false(Boolean)、null(引用类型)
java.util.Arrays的fill()方法可以设定新建数组的元素值
int[] arr = new int[5];//0,0,0,0,0
Arrays.fill(arr,60);//60,60,60,60,60
数组的复制:
System.arraycopy(arr1,arr1Index,arr2,arr2tIndex,arr1.length)
int [] arr2=Arrays.copyOf(arr1,arr1.length);//jdk6以上
四、字符串对象
1.字符数组和字符串之间的转换
String name="justin";
System.out.println(name);
System.out.println(name.charAt(0));
System.out.println(name.toUpperCase());
char[] cs={'j','u','s','t','i','n'};
String name1=new String(cs);
char[] cs1=name1.toCharArray();
执行时指定命令行自变量 Java package.class 1 2 3 4
long sum=0;
for (String string : args) {
sum+=Long.parseLong(string);
}
System.out.println("平均:"+(float)sum/args.length);
2.字符串的特性
1.字符串常量和字符串池
为了效率考虑以""包括的字符串(字符串常量),只要内容相同(序列大小写相同),无论在代码中出现几次,JVM都只会建立一个String实例,并在字符串池中维护。比较对象的内容用equals()方法
String name1="justin";
String name2="justin";
String name3=new String("justin");
String name4=new String("justin");
System.out.println(name1==name2);//true
System.out.println(name3==name4);//false
System.out.println(name3.equals(name4));//true
2.不可变动字符串
使用+连接字符串,会建立java.lang.StringBuilder对象,使用其append()方法来+左右两边字符串的附加,最后转换为toString()返回。所以使用+会频繁产生新对象
会造成效能的负担。可以使用StringBuilder来改善。
性能测试如下
public static void main(String[] args) {
System.out.println(testStringBuilder(30000));
System.out.println(testString(30000));
}
private static long testString(int i) {
long start=System.currentTimeMillis();
String s="";
for (int j = 0; j < i; j++) {
s+="a";
}
long end=System.currentTimeMillis();
return end-start;
} private static long testStringBuilder(int i) {
long start=System.currentTimeMillis();
StringBuilder s=new StringBuilder();
for (int j = 0; j < i; j++) {
s.append("a");
}
long end=System.currentTimeMillis();
return end-start;
}
结果如下:
0
453
StringBuilder s =new StringBuilder("123");//String->StringBuilder
String str=s.toString();//StringBuilder->String
String name1="java";
String name2=name1+"world";//产生新对象name2!=name4
String name3="java"+"world";//字面量和常量的运算会先运算出结果所以没有新建对象name3==name4
Stringname4="javaworld";
System.out.println(name2);
//反编译
String name1="java";
String name2=(new StringBuilder()).append(name1).append("world").toString;
//(1)
String text="";
for(int j;j<100;j++){
text+=j+'+'
}
//(2)
StringBuilder builder=new StringBuilder();
for(int i=1;i<100;i++)
{
builder.append(i).append('+');
}
字符串编码
1简体中文window下的纯文本编辑器GB2312
2.NetBeans中建立的Java原始码,默认是utf-8
3Eclipse下建立的.Java源码默认是GB2312
4.JVM在加载.class之后就会读取Unicode编码并产生对应的字符串对象,如果你是用的是utf-8编码那么编译时就要指定编码为utf-8。
( Javac -encofing UTF-8 main.java )
Java认识对象的更多相关文章
- 规则引擎集成接口(九)Java类对象
Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...
- java类 对象 和构造方法
github地址:https://github.com/lily1010/java_learn/tree/master/dog java中对象和类 java中万物皆对象,比如说动物,里面有猫,狗,鱼等 ...
- java integer对象判断两个数字是否相等
java integer对象判断两个数字是否相等,不一定对 问题发生的背景:javaweb的项目,起先,因为在java中实体类中的int类型在对象初始化之后会给int类型的数据默认赋值为0,这样在很多 ...
- 转载---Java集合对象的深度复制与普通复制
原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复 ...
- spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable
1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(val ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Gson把json串转换成java实体对象
Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...
- net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
我使用的net.sf.json是json-lib-2.4-jdk15.jar,把json对象转换为普通java实体对象时候有个问题,josn对象转换为java对象之后,json串里面的那几个小数点的值 ...
- Java中对象的深复制和浅复制详解
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...
- EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充
EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) EO理论上 ...
随机推荐
- 【Java123】JavaWeb Servlet开发
http://www.runoob.com/servlet/servlet-intro.html https://www.cnblogs.com/xdp-gacl/tag/JavaWeb学习总结/de ...
- zabbix没有frontends目录
去解压缩的源码包中取 # cd /opt/data/src/about_zabbix/zabbix-2.2.3# cp -rv frontends/ /opt/OperMainManager/zabb ...
- 剑指offer.找出数组中重复的数字
题目: 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数 ...
- torchvision
torchvision是一个包,它服务于pytorch深度学习框架,用来生成图片,视频数据集,模型类和预训练的模型torchvision由以下四个部分组成:1. torchvision.dataset ...
- Elasticsearch学习笔记1
Json (JavaScript Object Notation),即JavaScript对象标记法,当前十分流行和常见的互联网数据传输格式,尤其是在前端领域.Json是一种用于数据交换的文本格式,目 ...
- jsp el的内置对象
一.el内置对象(11个): pageScope (掌握) requestScope (掌握) applicationScope (掌握) sessionScope (掌握) param (了解) p ...
- window.location对象详解
window.location.href(当前URL) 结果如下: http://www.myurl.com:8866/test?id=123&username=xxx window.loca ...
- day62
一.组件 组件都具有模板,template new Vue()创建的是根组件 组件与实例一一对应,创建一个实例就是创建了一个组件,同理创建一个组件就相当于创建了一个实例 根组件的挂载点一般就是根组件的 ...
- 运放参数的详细解释和分析-part3,输入失调电压Vos及温漂
运放参数的详细解释和分析-part3,输入失调电压Vos及温漂 在运放的应用中,不可避免的会碰到运放的输入失调电压Vos问题,尤其对直流信号进行放大时,由于输入失调电压Vos的存在,放大电路的输出端总 ...
- POJ 1988&&2236
并查集,如果只是朴素的路径压缩,那么也就是一句话的事情. 但是,一般都没有这种仁慈的裸题(假的,多了去了) 1988:带权并查集,贼鸡儿像Luogu的那道杨威利的并查集(好像是叫银河英雄传说) 开两个 ...