成员变量:类中方法外的变量

局部变量:方法中的变量

注意,成员变量有默认初始值,而局部变量需要赋初始值

Java中虽然没有明确规定类必须首字母大写,但为了规范最好大写(因为自己刚刚写的时候就没看清写错了)

有时候不想在创造对象时,直接赋值,可以使用private关键字,并且加上get和set方法,来进行调用修改,注意这里即使变量首字母无论大写小写,get和set方法后面跟的变量名首字母都是大写

同时,可以在set方法中加入判断语句等功能

this代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象

封装:面向对象三大特征之一(封装、继承、多态),是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界无法直接操作

将类的某些信息隐藏在类内部,不允许外部直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法

封装好处:

通过方法来控制成员变量的操作,提高了代码的安全性

把代码用方法来进行封装,提高了代码的复用性

构造方法:特殊方法,作用是创建对象,完成对象数据的初始化

成员方法:类中的方法,注意,成员方法不要加static 可以加static,但是静态方法只能调静态方法和静态变量

// 格式
// 修饰符 类名(参数){}
public 类名(){}

当创建类的时候,如果没有构造方法,系统会给出默认的构造方法,建议创建类的时候,手动加上无参构造方法,那么再自己创建新的构造方法,调用时不容易出错。因为自定义构造方法,那么系统将不再提供默认的构造方法

public class Student {
private int age;
private String name; public Student() {
} public Student(int age) {
this.age = age;
} public Student(String name) {
this.name = name;
} public Student(String name, int age) {
this.age = age;
this.name = name;
} public void show() {
System.out.println(name + " " + age);
}
}
public class StudentDemo {
public static void main(String[] args) {
Student st1 = new Student();
st1.show(); Student st2 = new Student(30);
st2.show(); Student st3 = new Student("林青霞");
st3.show(); Student st4 = new Student("林青霞", 40);
st4.show();
}
}

尽量在创建类的时候,包含无参、带参构造方法,get方法、set方法

Java帮助文档使用:索引描述构造方法成员方法

注意,在查看成员方法时,要注意其参数、返回值

Java的==是比较两个变量的地址值是否相同,equals才是比较两个值是否相同

而python中的==是比较两个值是否相同,is才是比较两个地址值是否相同

public class String2 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
// System.out.println(s3);
System.out.println(s3==s1);
System.out.println(s3.equals(s1));
System.out.println(s1==s2);
System.out.println(s3==s4);
}
} false
true
true
false

String类在Java帮助文档的这句话:字符串是常量,它们的值不能被创建后改变。支持可变字符串字符串缓冲区。因为字符串对象是不可改变的,所以它们可以被共享,按我的理解,类似python的元组,给定之后就不能改变,但是可以重新赋值,Java里面应该是指向堆的地址不同

上述代码还需注意一点,每次new出来的String,地址都会不一样,虽然他们可以指向相同的值。如果是直接双引号的字符串,那么地址是相同的

public class String2 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
// System.out.println(s3);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());
System.out.println("--------------");
System.out.println(s3==s1);
System.out.println(s3.equals(s1));
System.out.println(s1==s2);
System.out.println(s3==s4);
}
} // 这里的4个变量的hashCode全部相同

这里也看了下equals和hashCode,在String类中重写了,现在我需要记住的东西是:

equals就是看内容是否相同

equals相同的东西,hashCode一定相同,equals不同的东西,hashCode也可能相同

Java的遍历字符串,和C语言很像,和python不像,不要搞混了

public class Shuzu {
public static void main(String[] args) {
String line = "Hello World!";
for(int i = 0;i<line.length();i++){
System.out.println(line.charAt(i));
}
}
}
public class Int_shuzu {
public static void main(String[] args) {
int [] arr = {1,2,3,4};
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}

上面的数组,是可以直接通过索引来进行输出或者操作,字符数组则不能够,猜测与String创建之后不能进行修改有关数组也是不能修改的

String在进行字符串拼接时,容易造成堆内存浪费的情况,所以有StringBuilder这个类

StringBuilder是一个可变的字符串类

public class StringBuilder_1 {
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = sb1.append("Hello");
StringBuilder sb3 = sb2.append("World");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
System.out.println("sb3:"+sb3);
System.out.println(sb1==sb2);
System.out.println(sb1==sb3);
System.out.println(sb3==sb2);
}
}

StringBuilder和String相互转换,为什么要做这个转换,因为String创建的字符串不能修改,且String中方法不是很多,StringBuilder中方法很多如append方法和reverse方法,所以需要做这个转换

怎么转换:

String到StringBuilder:直接StringBuilder创建时传入String

StringBuilder到String:toString方法

public class StringBuilder_2 {
public static void main(String[] args) {
String s = "Hello";
StringBuilder sb = new StringBuilder(s);
System.out.println(sb);
System.out.println("---------------");
StringBuilder ssb = new StringBuilder("World");
String st = ssb.toString();
System.out.println(st);
}
}

集合:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

ArrayList<E>:可调整大小的数组实现,其中<E>是一种特殊的数据类型,泛型

ArrayList中有集中常用方法:addremovegetsetsize

add方法很普遍,remove方法需要稍微注意下,remove删除不存在的东西返回false,和python不一样

import java.util.ArrayList;

public class ArrayList_1 {
public static void main(String[] args) {
ArrayList<String> arr1 = new ArrayList<>();
arr1.add("hello");
System.out.println(arr1);
arr1.add("hello");
arr1.add("world");
arr1.add("java");
System.out.println(arr1);
System.out.println(arr1.remove("hello"));
System.out.println(arr1);
System.out.println(arr1.remove("javaee"));
System.out.println(arr1); ArrayList<Integer> arr2 = new ArrayList();
arr2.add(11);
System.out.println(arr2);
}
}
[hello]
[hello, hello, world, java]
true
[hello, world, java]
false
[hello, world, java]
[11]

python列表不能删除列表中不存在的元素

a = ["hello",1,'world','python',2]
b = a.remove("hello")
print(b)
# c = a.remove("java")

python的集合也不可以删除集合中不存在的元素

a = set([1,2,3,4,5])
a.remove(6)
print(a) # 报错

简单复习一下python的列表常用删除函数:

  • del删除指定列表位置的值

  • remove删除指定值

  • pop不指定则删除末尾元素,也可以删除指定位置元素,同时会返回该值

同时注意一下,Java的ArrayList的5个基本函数已给出,那么在遍历,或者查找等要求下,都是使用上述5中方法实现

import java.util.ArrayList;

public class ArrayList_2 {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<>();
arr.add("hello");
arr.add("world");
arr.add("java");
for(int i=0;i<arr.size();i++){
System.out.println(arr.get(i));
}
}
}

请千万注意,这里获取长度用size函数,遍历使用get函数


length是对应数组的属性

length()是对应String的方法

size()是集合的方法


JVM虚拟机退出:

System.exit(0);

Java学习笔记-基础语法Ⅱ的更多相关文章

  1. Java学习笔记-基础语法Ⅳ

    多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...

  2. Java学习笔记-基础语法

    Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...

  3. Java学习笔记-基础语法Ⅹ-进程线程

    学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...

  4. Java学习笔记-基础语法Ⅷ-泛型、Map

    泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...

  5. Java学习笔记-基础语法Ⅴ

    学习一些Java常用的API Math:包含执行基本数字运算的方法 如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用 Java中有两种random函数,Math.Random()函数能够 ...

  6. JAVA 学习笔记 - 基础语法 2

    ---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null;             //在堆栈中申明变量名称 数组名称 =  new  数据类型[10];       // ...

  7. JAVA 学习笔记 - 基础语法1

    1. 类的定义 public class  与  class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...

  8. Java学习笔记-基础语法ⅩⅠ-UDP、TCP

    网络编程 三要素:IP地址.端口.协议 IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1.VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0 ...

  9. Java学习笔记-基础语法Ⅸ-文件

    File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...

  10. Java学习笔记-基础语法Ⅶ-集合

    集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...

随机推荐

  1. Asp.Net Core之Identity应用(下篇)

    一.前言 在上篇中简单介绍了 Asp.Net Core 自带的 Identity,一个负责对用户的身份进行认证的框架,当我们按需选择这个框架作为管理和存储我们应用中的用户账号数据的时候,就会添加到自己 ...

  2. 前端webpack workflow(二)——Webpack基本使用

    作者:Jogis原文链接:https://github.com/yesvods/Blog/issues/3转载请注明原文链接以及作者信息 前一篇文章介绍了webpack以及安装方法,这次将会介绍web ...

  3. SVG vs Image, SVG vs Iconfont

    这可能是个别人写过很多次的话题,但貌似由于兼容性的原因?图标的显示还是用着 Iconfont 或者 CSS Sprite 的形式?希望通过自己新瓶装旧酒的方式能重新引导一下问题. SVG vs Ima ...

  4. dev分支代码覆盖master分支代码

    将develop分支上的代码完全覆盖master分支, 1. 切换到master分支 git checkout master 2. 执行以下命令 git reset --hard origin/dev ...

  5. 【转】shim.ChaincodeStubInterface用法

    作为记录 shim.ChaincodeStubInterface用法

  6. WePY开发环境的安装和小程序生成WePY项目

    相对于微信开发者工具而言,WePY的安装和生成项目稍显复杂.特记录下安装顺序: 1.安装Node.js 在Node官网(https://nodejs.org/)下载Node.js的安装包,此处我下载的 ...

  7. SLF4J (The Simple Logging Facade for Java)使用记录

    SLF4J (The Simple Logging Facade for Java)使用记录 官网 http://www.slf4j.org/ 参考资料 官方文档 什么是 SLF4J? 官网: The ...

  8. HTTP请求头格式和响应格式

    HTTP请求头格式 提示: 回车符 \r 换行符 \n 请求首行分析: 请求方式: GET 和 POST 方式: GET请求:地址栏访问.超链接访问都是get请求方式,get请求方式不安全,地址栏大小 ...

  9. python数据类型内置的方法

    数据类型的内置方法 在日常生活中不同类型的数据具有不同的功能 eg:表格数据文件具有处理表格的各项功能(透视表 图形化 公式计算) 视频数据文件具有快进 加速等各项功能 ... 1.整型int # 方 ...

  10. pytest进阶使用【fixture(一)fixture与setup/teardown区别】

    fixture翻译为装置. 我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能. 当在说pytest比unitest灵活时,fixture肯定是其中的一个理由. 测试数据的准备和执行以后的数 ...