一、类与对象

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认识对象的更多相关文章

  1. 规则引擎集成接口(九)Java类对象

    Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...

  2. java类 对象 和构造方法

    github地址:https://github.com/lily1010/java_learn/tree/master/dog java中对象和类 java中万物皆对象,比如说动物,里面有猫,狗,鱼等 ...

  3. java integer对象判断两个数字是否相等

    java integer对象判断两个数字是否相等,不一定对 问题发生的背景:javaweb的项目,起先,因为在java中实体类中的int类型在对象初始化之后会给int类型的数据默认赋值为0,这样在很多 ...

  4. 转载---Java集合对象的深度复制与普通复制

    原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复 ...

  5. spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

    1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(val ...

  6. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Gson把json串转换成java实体对象

    Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...

  8. net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案

    我使用的net.sf.json是json-lib-2.4-jdk15.jar,把json对象转换为普通java实体对象时候有个问题,josn对象转换为java对象之后,json串里面的那几个小数点的值 ...

  9. Java中对象的深复制和浅复制详解

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  10. EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

    EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) EO理论上 ...

随机推荐

  1. C++的技术探究

    C++深究 函数指针 double pam(int, double); // prototype double (*pf)(int, double); // declare function poin ...

  2. scapy学习笔记(3)发送包,SYN及TCP traceroute 扫描

    转载请注明:@小五义:http://www.cnblogs/xiaowuyi 在安装完scapy(前两篇笔记有介绍)后,linux环境下,执行sudo scapy运行scapy. 一.简单的发送包 1 ...

  3. 六,ESP8266 TCP Client(基于Lua脚本语言)

    今天不知道是不是让我姐挺失望.......很多时候都不知道自己努力的方向对不对,,以后能不能带给家人最美好的期盼...... Init.lua 没啥改变,,就改了一下加载Client.lua gpio ...

  4. less初识

    一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以 ...

  5. 【小程序】<image>图片实现宽度100%时,高度自适应

    *.wxss样式设置 .img{ width:100% } *.wxml给<image>标签添加属性  mode="widthFix" <image class= ...

  6. 【LeeCode88】Merge Sorted Array★

    1.题目描述: 2.解题思路: 题意:两个由整数构成的有序数组nums1和nums2,合并nums2到nums1,使之成为一个有序数组.注意,假设数组nums1有足够的空间存储nums1和nums2的 ...

  7. 20155206赵飞 Exp1PC平台逆向破解及Bof基础实践

    实验一 逆向及Bof基础 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP汇编指令的机器码是"90" JNE汇编指令的机器码是"75" ...

  8. 2017-2018 Exp8 Web基础 20155214

    目录 Exp8 Web基础 实验内容 建站过程 SQL注入 知识点 Exp8 Web基础 实验内容 实验环境 主机 Kali 靶机 Kali 实验工具 后台语言 'PHP' 服务器 'Apache' ...

  9. 20155317 十六周second 取值

    20155317 十六周second 取值 题目如下图: secondset #define base 0xFFFFC0000 # #define &clock void setsecond( ...

  10. Codeforces 954D Fight Against Traffic(BFS 最短路)

    题目链接:Fight Against Traffic 题意:有n个点个m条双向边,现在给出两个点S和T并要增加一条边,问增加一条边且S和T之间距离不变短的情况有几种? 题解:首先dfs求一下S到其他点 ...